Iphone 使用UIGestureRecognitor收听UITouch事件

Iphone 使用UIGestureRecognitor收听UITouch事件,iphone,objective-c,ios,cocoa-touch,uigesturerecognizer,Iphone,Objective C,Ios,Cocoa Touch,Uigesturerecognizer,我正在创建自定义UIView并在其上添加UIAPTgestureRecognitor。我有一个轻拍手势的处理程序。但同时,我希望我的UIView能够收听touchBegind和touchSended方法。我还实现了GestureRecognitor:shouldReceiveTouch:method,但不会调用ToucheSBegind/touchesEnded方法。有什么线索吗 在我的自定义UIView中 - (BOOL)gestureRecognizer:(UIGestureRecogniz

我正在创建自定义UIView并在其上添加UIAPTgestureRecognitor。我有一个轻拍手势的处理程序。但同时,我希望我的UIView能够收听touchBegind和touchSended方法。我还实现了GestureRecognitor:shouldReceiveTouch:method,但不会调用ToucheSBegind/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];

您需要将手势识别器的
cancelsTouchesInView
(很可能是
delaysTouchesBegan
delaystouchesend
)设置为
NO
。手势识别器的默认行为是避免它和视图同时处理触摸。这些设置允许您微调该行为。

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

从苹果文档:

取消触摸视图如果手势识别器识别出其手势, 这会从他们的角度解开这个手势的剩余部分(所以 窗户不能送他们)。该窗口取消先前的设置 通过(touchesCancelled:withEvent:)消息传递触摸。如果 手势识别器无法识别其手势,视图接收 多点触摸序列中的所有触摸

进一步阅读:

我一直认为touchesbreated只适用于主视图控制器的视图。我真希望我能得到你提到的那种行为。我使用的是默认设置,但我的touch方法仍然会被调用。请看我的问题:@RobNapier未能将cancelsTouchesInView与我的问题联系在一起: