Mat*_*ijs 10 gesture uigesturerecognizer ios
假设我正在跟踪拖动手势.在我的事件处理程序中,我使用阈值来确定拖动何时导致操作.超过阈值时,我想指示拖动手势已完成.
我可以在文档中找到的唯一的事情就是这条线在这里:
如果在手势识别器当前正在识别手势时将此属性更改为"否",则手势识别器将转换为已取消状态.
所以:
if (translation.y > 100) {
// do action
[self doAction];
//end recognizer
sender.enabled = NO;
sender.enabled = YES;
}
Run Code Online (Sandbox Code Playgroud)
这有效,但看起来可能有一个更简洁的方式.
有没有人知道另一种表明手势已经以编程方式结束的方式?我希望像-end:生成具有状态的最终事件的方法UIGestureRecognizerStateEnded.
您是否定义了自定义UIGestureRecognizer?如果您识别的手势与Apple定义的手势不同,因为它具有不同的阈值或者与常规UIPanGestureRecognizer不同,那么创建自己的UIGestureRecognizer可能是有意义的.(参见子类注释)
如果你有UIGestureRecognizer的子类,你可以简单地设置这样的状态:
self.state = UIGestureRecognizerStateEnded;
Run Code Online (Sandbox Code Playgroud)
您可能希望在touchesMoved:withEvent:方法中执行此操作.另请注意:
"UIGestureRecognizer的子类必须导入UIGestureRecognizerSubclass.h.此头文件包含重新声明状态,使其成为读写."
另一方面,如果您只实现了UIGestureRecognizerDelegate,则状态是只读的,并且无法直接设置它.在这种情况下,您的禁用/启用方法可能是您可以做的最好的方法.
使用您显示的代码,您需要具有在取消手势识别器时启动动画的逻辑,我会说这不好,因为还有其他方法可以取消此手势识别器而您不想完成动画.
考虑到您有一个启动动画的方法,您只需要在超过阈值和手势正常结束时调用此方法。然后是两个不同的场合。您提供的代码如下所示:
if (translation.y > 100) {
// do action
[self finishFlip];
sender.enabled = NO;
sender.enabled = YES;
}
Run Code Online (Sandbox Code Playgroud)
如果用户一直拖动手指会阻止任何后续操作,则在此处取消手势也可能很有用。
如果您有一个团队对此进行开发并且您需要发生特定事件,您应该将手势识别器子类化为非建议。
| 归档时间: |
|
| 查看次数: |
9460 次 |
| 最近记录: |