您的位置:首页 > 产品设计 > UI/UE

屏蔽手势UIGestureRecognizer 先后响应

2013-11-28 09:12 295 查看
在iOS5一下对于手势的识别能力并不强,比如iOS6上面按钮的一个tap事件,最先接收的是uiview,并相应,而不是最上面的button,这时候就需要判断手势所在的位置和手势所在的控制器了

如下例子:

在scrollview上add 了一个单击事件

singletap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];

[singletap setNumberOfTapsRequired:1];

[scrollview addGestureRecognizer:singletap];

这样点击按钮,不会响应按钮的事件,直接跳到handleSingleTap去了?

单击事件不是应该先被直接单击的subview处理,如果没有处理才提交到supview处理嘛?

怎么才能让按钮响应单击事件?

使用

UIGestureRecognizerDelegate的一个方法判断点击的是哪个view,确定是否响应事件。

singletap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];

[singletap setNumberOfTapsRequired:1];

singletap.delegate = self;

[scrollview addGestureRecognizer:singletap];

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if(touch.view != scrollview){
return NO;
}else
return YES;
}

可结合下面方法
//TODO: 当手势在 tableview位置时候阻止触摸事件向下传递
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
//    if (oldPassword.superview!=nil) {
//    NSLog(@"%@",touch.view);

CGPoint point=[touch locationInView:clientTableview];
NSLog(@"%f,%f",point.x,point.y);
if (point.x&&point.x<clientTableview.frame.size.width && point.y &&  point.y< clientTableview.contentSize.height) {
returnNO;
}
return [supergestureRecognizer:gestureRecognizer shouldReceiveTouch:touch];;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: