与UIGestureRecognizer一起收听UITouch事件

时间:2012-03-20 00:49:29

标签: iphone objective-c ios cocoa-touch uigesturerecognizer

我正在创建自定义UIView并在其上添加UITapGestureRecognizer。我有一个轻拍手势的处理程序。但与此同时,我希望我的UIView能够收听touchesBegan& touchesEnded方法。我已经实现了gestureRecognizer:shouldReceiveTouch:方法,但是touchesBegan / touchesEnded方法也没有被调用。有什么线索的原因?

在我的自定义UIView

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)iGestureRecognizer shouldReceiveTouch:(UITouch *)iTouch {
    return YES;
}

在我的视图控制器中

MyCustomView aCustomView = [[[MyCustomView alloc] init] autorelease];
                UIGestureRecognizer *myGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
[aCustomView addGestureRecognizer:myGestureRecognizer];
                [myGestureRecognizer release];

2 个答案:

答案 0 :(得分:10)

您需要为手势识别器设置cancelsTouchesInView(可能delaysTouchesBegandelaysTouchesEnded)至NO。手势识别器的默认行为是避免让它和视图处理触摸。这些设置可以让您微调该行为。

答案 1 :(得分:0)

如前所述,您需要在cancelTouchesInView上将NO属性设置为UITapGestureRecognizer

来自Apple Docs:

  

cancelsTouchesInView - 如果手势识别器识别出其手势,   它从他们的视角中取消了该手势的剩余触摸(所以   窗口不会传递它们)。窗口取消之前的   使用(touchesCancelled:withEvent :)消息传递触摸。如果一个   手势识别器无法识别其手势,视图会收到   多触摸序列中的所有触摸。

进一步阅读: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIGestureRecognizer_Class/