【问题标题】:Listening to UITouch event along with UIGestureRecognizer与 UIGestureRecognizer 一起监听 UITouch 事件
【发布时间】:2012-03-20 00:49:28
【问题描述】:

我正在创建一个自定义 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];

【问题讨论】:

  • 我一直以为touchesBegan只适用于主viewController的view。

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


【解决方案1】:

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

【讨论】:

【解决方案2】:

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

来自 Apple 文档:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多