Ios 如何以编程方式结束/重置UIgestureRecognitor?

Ios 如何以编程方式结束/重置UIgestureRecognitor?,ios,uigesturerecognizer,gesture,Ios,Uigesturerecognizer,Gesture,假设我当前正在跟踪拖动手势。在我的事件处理程序中,我使用阈值来确定拖动何时导致操作。当超过阈值时,我想指出拖动手势已经完成 我在文档中只能找到这一行: 如果在启用手势识别器时将此属性更改为“否” 当前识别手势时,手势识别器将转换为 取消的状态 因此: 这是可行的,但看起来可能有更整洁的方式 有人知道用另一种方式表示手势以编程方式结束吗?我希望使用类似于方法-end:的方法,生成状态为UIgestureRecognitizerStateEnd的最终事件。您是否定义了自定义UIgestureReco

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

我在文档中只能找到这一行:

如果在启用手势识别器时将此属性更改为“否” 当前识别手势时,手势识别器将转换为 取消的状态

因此:

这是可行的,但看起来可能有更整洁的方式


有人知道用另一种方式表示手势以编程方式结束吗?我希望使用类似于方法
-end:
的方法,生成状态为
UIgestureRecognitizerStateEnd

的最终事件。您是否定义了自定义UIgestureRecognitizer?如果您正在识别的手势与Apple定义的标准手势不同,因为它具有不同的阈值,或者与常规的UIPangestureRecognitor不同,那么创建您自己的UIgestureRecognitor可能是有意义的。()

如果您有子类UIGestureRecognizer,只需如下设置状态:

  self.state = UIGestureRecognizerStateEnded;
if (translation.y > 100) {
    // do action
    [self finishFlip];
    sender.enabled = NO;
    sender.enabled = YES;
}
您可能希望在touchsmoved:withEvent:method中执行此操作。另请注意:

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


另一方面,如果只实现UIGestureRecognitzerDelegate,则状态为只读,无法直接设置。在这种情况下,禁用/启用手势识别器的方法可能是您能做的最好的方法。

使用您显示的代码,您需要具备在取消手势识别器时启动动画的逻辑,我认为这并不好,因为有其他方法可以取消此手势识别器,而您不需要动画完成了

考虑到您有一个启动动画的方法,您只需要在通过阈值和手势正常结束时调用此方法。两个不同的场合。 您提供的代码如下所示:

  self.state = UIGestureRecognizerStateEnded;
if (translation.y > 100) {
    // do action
    [self finishFlip];
    sender.enabled = NO;
    sender.enabled = YES;
}
如果用户继续拖动手指,则在此处取消手势也可能很有用,因为这会阻止任何后续操作


如果您将有一个团队在此基础上进行开发,并且您需要发生特定事件,您应该按照nont建议对手势识别器进行子类化。

您能描述一下您对拖动手势所做的操作吗?你真的在拖东西吗?嗨,Fábio,是的,我在水平拖动,比如说一本虚拟书的一页,当超过阈值时,我启动动画翻转一页,然后想提前结束拖动动作,以便生成状态为UIgestureRecognitizerStateEnded的事件,处理与此手势常规结束相关的所有动作。子类化是实现整洁的答案。我不是这样想的。谢谢