最近一个项目的需求,用到了手势识别,此处简单写一下使用时碰到的困难及解决方法。
- 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];
把手势拖动归零。否则会一直叠加
- (BOOL)gestureRecognizer:(UIGestureRecognizer )gestureRecognizer shouldReceiveTouch:(UITouch )touch
暂时想到这些,如果有错误,请指出。