Objective c 自定义离散手势识别器能够发送多个离散动作并响应RequireTestureRecognitizerToFail需求
我在自定义手势识别方面遇到了一些问题。我正在尝试做一些与UIGestureRecognizer实现的一般用例略有不同的事情 更具体地说Objective c 自定义离散手势识别器能够发送多个离散动作并响应RequireTestureRecognitizerToFail需求,objective-c,ios,cocoa,uigesturerecognizer,gesture,Objective C,Ios,Cocoa,Uigesturerecognizer,Gesture,我在自定义手势识别方面遇到了一些问题。我正在尝试做一些与UIGestureRecognizer实现的一般用例略有不同的事情 更具体地说 我有离散的手势,但我希望他们在手势过程中的特定点发送多条消息(例如,我有一个“循环”手势,每次有新的循环时,我都要发送一条newLoopRecognized消息,并且在手势结束时发送一条allLoopsRecognized消息) 我希望能够在一些消息之后“重置”手势状态,但允许手势识别器仍然接收事件(并且不必移除所有触碰并重新开始手势:每次我发送newLoop
- 我有离散的手势,但我希望他们在手势过程中的特定点发送多条消息(例如,我有一个“循环”手势,每次有新的循环时,我都要发送一条
消息,并且在手势结束时发送一条newLoopRecognized
消息)allLoopsRecognized
- 我希望能够在一些消息之后“重置”手势状态,但允许手势识别器仍然接收事件(并且不必移除所有触碰并重新开始手势:每次我发送
消息时,我希望能够在不抬起手指并重新开始的情况下绘制新的循环,如果切换到newLoopRecognized
状态,这是不可能的)gestureerecognized
- 我想有几个手势,可能需要其他手势识别失败
StateChanged
更改为StateChanged
因此,这在我的情况下不起作用,因为我只想在某个特定事件(新循环的开始)发送事件
此外,如果我使用连续手势方法,我将无法通过以下方式在每个连续循环之间重置我的状态:
...
if( new_loop_detected )
{
self.state = UIGestureRecognizerStateChanged;
[self reset];
}
...
因为这将阻止我提取newLoopRecognized
消息中的循环状态(例如速度和振幅),因为它们在消息发送之前被重置
我可以使用一种复杂的方法,比如将我所有的状态变量复制到另一个变量中,我将在newLoopRecognized
消息中使用这个变量,但这会很混乱
我可以简单地在代码中发送通知消息,例如:
...
if( new_loop_detected )
{
[self performSelector:actionOnNewLoopRecognized onTarget:target];
}
...
但是,即使我在另一个手势识别器上设置了requiregestrerecognizertofail
,允许这个手势识别器进行检测,而另一个手势识别器还没有时间失败或被识别,这也会触发这些消息事件
可能的设计
如果没有简单的方法使用常规的UIgestureRecognitor实现来实现我的设计,我可能不得不扩展离散手势状态
StatePossible -> StateRecognizing -> StateRecognized
向州政府过渡将:
- 发送正确的操作消息(例如,我有一个额外的状态变量,我将其设置为
或messageisonnewloopsrecogned
),并在手势识别器上调用resetmessageisonalllopsrecogned
- 排除需要此手势识别器无法进行检测的手势识别器