【问题标题】:Drag only when not a Swipe仅在非滑动时拖动
【发布时间】:2014-05-28 02:15:14
【问题描述】:

我有 UIView,我希望用户能够在屏幕上拖动。但是,如果在同一个 UIView 中向上滑动,我还想执行一个特定的操作。现在,我在 UIView 上附加了一个向上滑动手势识别器,并且实现了 touchesBegan、touchesMoved 和 touchesEnded 方法。一切正常,除了一个问题,当用户向上滑动时,UIView 首先上升一点,然后手势识别器接管并完成向上滑动动作。有没有办法可以将拖动延迟一秒钟,直到向上滑动的手势识别器失败,然后 touchesBegan、touchesMoved 和 touchesEnded 接管并照常运行?

谢谢。

【问题讨论】:

    标签: uigesturerecognizer swipe drag


    【解决方案1】:

    我会删除 touches* 方法并用平移手势识别器替换它们。然后,您可以要求滑动手势在平移手势起作用之前失败。您可以像这样实现行为:

    [self.panRecognizer 需要GestureRecognizerToFail:self.swipeRecognizer];

    苹果建议https://developer.apple.com/library/ios/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/GestureRecognizer_basics/GestureRecognizer_basics.html

    edit 作为替代方案,您可以修改 touchesMoved 以便仅在滑动识别器的状态为“UIGestureRecognizerStateFailed”时移动您的视图,这将为您提供相同的行为,但不需要您修改太多代码。

    【讨论】:

    • 我最终在视图中添加了一个 panRecognizer 并让它忽略所有向上/向下手势,然后落到下一个响应者身上,它们可以像往常一样被解释。 panRecognizer 然后按它应该的方式处理所有右/左手势。
    猜你喜欢
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 2014-11-23
    • 2021-03-20
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多