我遇到了自定义手势识别的一些问题。我正在尝试做一些与UIGestureRecognizer实现的一般用例略有不同的事情。
newLoopRecognized
消息新的循环,以及手势结束时的allLoopsRecognized
消息)newLoopRecognized
消息,我希望能够在不抬起手指并重新开始的情况下绘制新循环,如果切换到GestureRecognized
状态则无法进行此操作我的理解是,当您绘制连续手势时,操作消息将定期发送到目标对象 ,而不一定每次从{{更改状态时1}}再次StateChanged
?
因此,这在我的情况下不起作用,因为我只想在某个特定事件(新循环的开始)发送事件。
另外,如果我使用连续手势方法,我将无法通过以下方式在每个连续循环之间重置我的状态:
StateChanged
因为这会阻止我在...
if( new_loop_detected )
{
self.state = UIGestureRecognizerStateChanged;
[self reset];
}
...
消息中提取循环的状态(例如速度和幅度),因为它们在消息发送之前被重置。
我可以使用一种复杂的方法,例如将我所有的状态变量复制到我将在newLoopRecognized
消息中使用的另一个变量中,但这会很混乱。
我只需在代码中发送通知消息,例如:
newLoopRecognized
但是,即使我在另一个手势识别器上设置...
if( new_loop_detected )
{
[self performSelector:actionOnNewLoopRecognized onTarget:target];
}
...
以允许此检测器进行检测,而另一个尚未有时间失败或被识别,这会触发这些消息事件。
如果使用常规的UIGestureRecognizer实现没有简单的方法来实现我的设计,我可能不得不扩展离散手势状态
requireGestureRecognizerToFail
转换到StateRecognizing的地方:
StatePossible -> StateRecognizing -> StateRecognized
或MessageIsOnNewLoopRecognized
的附加状态变量)并在手势识别器上调用重置有没有办法使用常规的UIGestureRecognizer子类来做我想要的,或者我应该重新实现整个手势识别框架?是否有适当的此类实现示例,或者您是否知道什么是正确的设计?如果我要重新实现完整的手势框架,我希望它与常规手势向后兼容,以允许我使用iOS手势而无需重新实现它们。