【问题标题】:How to prioritize gesture recognizers and touches in a UIView如何在 UIView 中优先处理手势识别器和触摸
【发布时间】:2013-03-29 23:52:02
【问题描述】:

从阅读UIGestureRecognizer Class Reference 可以看出,API 将为您处理触摸和手势控制的优先级,确保您的touchesBegan 和相关方法不会在视图上调用,除非手势识别器首先失败:

窗口先将触摸事件传递给手势识别器,然后再将它们传递到附加到手势识别器的命中测试视图。通常,如果手势识别器分析多点触摸序列中的触摸流并且无法识别其手势,则视图会接收到完整的触摸补充。 如果手势识别器识别出它的手势,则视图的剩余触摸将被取消。

我在视图中添加了滑动手势,它正在工作。通过一些日志记录,当我进行单次滑动时,该方法会这样报告。然而,我的touchesBegan 方法也通过其日志进行报告,尽管touchesCancelled 方法正如预期的那样也接收到一条消息。

我希望并期望手势识别能够防止touchesBegan 或touchesMoved 被调用。

所以我的问题是:对于实际上基于其状态延迟触摸的手势识别器,是否需要额外的设置?文档不建议任何其他必要的内容。

我的设置很简单:

 swipeUpTwoFinger=[[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(doubleSwipeUp:)]autorelease];
swipeUpTwoFinger.direction=UISwipeGestureRecognizerDirectionUp;
swipeUpTwoFinger.numberOfTouchesRequired=2;
[self addGestureRecognizer:swipeUpTwoFinger];

我也尝试过这个测试,以确保识别器在使用 touchesBegan 处理之前失败(如果您相信上面的文档所说的话,这个测试应该不是是必要的)但是 touchesBegan此测试后仍在处理日志行:

if (swipeUpTwoFinger.state==UIGestureRecognizerStateFailed)

【问题讨论】:

    标签: iphone ios objective-c uiview uigesturerecognizer


    【解决方案1】:

    听起来你需要: swipeUpTwoFinger.delaysTouchesBegan = YES;

    【讨论】:

    • 确实我刚刚发现它默认没有启用。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2018-12-31
    • 2015-04-19
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多