ios - 如何以编程方式结束/重置 UIGestureRecognizer?

标签 ios uigesturerecognizer gesture

假设我目前正在跟踪拖动手势。在我的事件处理程序中,我使用一个阈值来确定拖动何时导致 Action 。当超过阈值时,我想指示拖动手势已完成。

我在文档中唯一能找到的就是这行 here :

If you change this property to NO while a gesture recognizer is currently recognizing a gesture, the gesture recognizer transitions to a cancelled state.

所以:

if (translation.y > 100) {
    // do action
    [self doAction];

    //end recognizer
    sender.enabled = NO;
    sender.enabled = YES;
}

这可行,但看起来可能有更简洁的方法。

有谁知道以编程方式指示手势已结束的另一种方法?我希望有类似 -end: 的方法,它会生成状态为 UIGestureRecognizerStateEnded 的最终事件。

最佳答案

您是否定义了自定义 UIGestureRecognizer?如果您识别的手势与 Apple 定义的标准手势不同,因为它具有不同的阈值或与常规 UIPanGestureRecognizer 不同,那么创建您自己的 UIGestureRecognizer 可能是有意义的。 ( see subclassing notes )

如果你有 UIGestureRecognizer 的子类,你可以像这样简单地设置状态:

  self.state = UIGestureRecognizerStateEnded;

您可能想在 touchesMoved:withEvent: 方法中执行此操作。另请注意:

“UIGestureRecognizer 的子类必须导入 UIGestureRecognizerSubclass.h。此头文件包含使其可读写的状态重新声明。”

另一方面,如果您只实现一个 UIGestureRecognizerDelegate,则状态是只读的,无法直接设置它。在那种情况下,您禁用/启用的方法可能是您能做的最好的。

关于ios - 如何以编程方式结束/重置 UIGestureRecognizer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12278798/

相关文章:

macos - 如何在 iOS 或 Mac 应用程序中绘制乐谱上的音符?

ios - 在 SwiftUI 中处理双重和三重手势识别器

objective-c - 是否可以使用 UITapGestureRecognizer initWithTarget :action: 发送对象

android - 替换弃用的 GestureDetector 构造函数

swift - 如何使用滑动手势访问相机?

ios - NSString 到 NSDate 转换的特定格式化程序

ios - 如何实现iOS5/6的iOS 7 Tab栏图标设计

ios - 如何在 Xamarin.iOS 中保护 cache.db 文件

ios - 当 userinteractionenabled 为 NO 时获取触摸

iOS 给 UIImageView 添加点击手势