您的位置:首页 > 移动开发 > IOS开发

iOS的手势

2015-07-01 17:03 573 查看
最近一个项目的需求,用到了手势识别,此处简单写一下使用时碰到的困难及解决方法。

UITapGestureRecognizer 点击手势

手势的识别需要userInteractionEnabled的支持,特别是把手势放到ImageView之类的,ImageView默认没有对userInteractionEnabled打开支持。

在view上添加手势,又在view上添加button或者tableviewcell。

a)、 button获取事件后,手势获取不到手势怎么办?

b)、tableviewcell点击后,手势再次获取手势怎么办?

通用的解决方法是使用代理,可以分情况解决

#pragma mark UIGestureRecognizer delegate
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
// 输出点击的view的类名
NSLog(@"%@", NSStringFromClass([touch.view class]));

// 若为UITableViewCellContentView(即点击了tableViewCell),则不截获Touch事件
if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
return NO;
}
}


这个代理非常有用

还有一种是设置

tapGestureRecognizer.cancelsTouchesInView = YES;
// 默认是 yes


拖拽手势

这个手势如果你需要多个,建议分开写。

对于它的控制还是使用代理

(BOOL)gestureRecognizer:(UIGestureRecognizer )gestureRecognizer shouldReceiveTouch:(UITouch )touch

此处经常使用的几个知识点:

CGPoint point = [touch locationInView:self.view];

获取你的手势在视图的位置

不是手势代理的

[你的手势 setTranslation:CGPointZero inView:_leftView];

把手势拖动归零。否则会一直叠加

暂时想到这些,如果有错误,请指出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: