说我正在跟踪拖动手势。在我的事件处理程序中,我使用阈值来确定拖动何时导致操作。超过阈值时,我想表明拖动手势已经完成。
我在文档中唯一能找到的就是这一行here:
如果在手势识别器处于此状态时将此属性更改为“否” 当前识别手势,手势识别器转换到 被取消的州。
所以:
if (translation.y > 100) {
// do action
[self doAction];
//end recognizer
sender.enabled = NO;
sender.enabled = YES;
}
这样可行,但看起来可能有更简洁的方式。
有没有人知道另一种表示手势以编程方式结束的方式?我希望像-end:
这样的方法可以生成状态为UIGestureRecognizerStateEnded
的最终事件。
答案 0 :(得分:8)
您是否定义了自定义UIGestureRecognizer?如果您识别的手势与Apple定义的手势不同,因为它具有不同的阈值或者与常规UIPanGestureRecognizer不同,那么创建自己的UIGestureRecognizer可能是有意义的。 (see subclassing notes)
如果你有UIGestureRecognizer的子类,你可以简单地设置这样的状态:
self.state = UIGestureRecognizerStateEnded;
您可能希望在touchesMoved:withEvent:方法中执行此操作。另请注意:
“UIGestureRecognizer的子类必须导入UIGestureRecognizerSubclass.h。此头文件包含重新声明的状态,使其成为读写。”
另一方面,如果您只实现UIGestureRecognizerDelegate,则状态是只读的,并且无法直接设置它。在这种情况下,您的禁用/启用方法可能是您可以做的最佳方法。
答案 1 :(得分:4)
使用您展示的代码,您需要拥有在取消手势识别器时启动动画的逻辑,并且我说这不是很好,因为有其他方法可以取消此手势识别器而不需要您完成动画。
考虑到你有一个启动动画的方法,你只需要在传递阈值和手势正常结束时调用此方法。然后两个不同的场合。 您提供的代码如下所示:
if (translation.y > 100) {
// do action
[self finishFlip];
sender.enabled = NO;
sender.enabled = YES;
}
如果用户继续拖动手指,则取消此处的手势可能也很有用。
如果你有一个团队开发这个并且你需要一个特定的事件发生,你应该将手势识别器子类化为不建议。