iOS 同一个View识别单击和双击手势
2016-09-10 本文已影响3884人
毛毛虫灾害
需求:在同一个cell上响应单击和双击方法,分别进入不同方法。
在视图上同时识别单击手势和双击手势的问题在于,当检测到一个单击操作时,无法确定是确实是一个单击操作或者只是双击操作中的第一次点击。解决这个问题的方法就是:在检测到单击时,需要等一段时间等待第二次点击,如果没有第二次点击,则为单击操作;如果有第二次点击,则为双击操作。
检测手势有两种方法,一种是定制子视图,重写视图从UIResponder类中继承来的事件处理方法,touchesBegan:withEvent:等一系列方法来检测手势;另一个方法是使用手势识别器,即UIGestureRecognize的各种具体子类。
//在cell上添加 bgView,给bgView添加两个手势检测方法
bgView.userInteractionEnabled = YES;
UITapGestureRecognizer *singleTapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleSingleTap:)];
singleTapGesture.numberOfTapsRequired =1;
singleTapGesture.numberOfTouchesRequired =1;
[bgView addGestureRecognizer:singleTapGesture];
UITapGestureRecognizer *doubleTapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleDoubleTap:)];
doubleTapGesture.numberOfTapsRequired =2;
doubleTapGesture.numberOfTouchesRequired =1;
[bgView addGestureRecognizer:doubleTapGesture];
//只有当doubleTapGesture识别失败的时候(即识别出这不是双击操作),singleTapGesture才能开始识别
[singleTapGesture requireGestureRecognizerToFail:doubleTapGesture];
//两个手势分别响应的方法
-(void)handleSingleTap:(UIGestureRecognizer *)sender{
//chooseNum为手势响应的view的tag值
chooseNum=(int)sender.view.tag;
CGPoint touchPoint = [sender locationInView:self];
}
-(void)handleDoubleTap:(UIGestureRecognizer *)sender{
//chooseNum为手势响应的cell的tag值
chooseNum=(int)sender.view.tag;
UITableViewCell *v = (UITableViewCell *)[[sender view] superview];
chooseNum=v.tag;
}
参考文章地址 :
http://www.voidcn.com/blog/Dancer2015/article/p-5957064.html