Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 自定义离散手势识别器能够发送多个离散动作并响应RequireTestureRecognitizerToFail需求_Objective C_Ios_Cocoa_Uigesturerecognizer_Gesture - Fatal编程技术网

Objective c 自定义离散手势识别器能够发送多个离散动作并响应RequireTestureRecognitizerToFail需求

Objective c 自定义离散手势识别器能够发送多个离散动作并响应RequireTestureRecognitizerToFail需求,objective-c,ios,cocoa,uigesturerecognizer,gesture,Objective C,Ios,Cocoa,Uigesturerecognizer,Gesture,我在自定义手势识别方面遇到了一些问题。我正在尝试做一些与UIGestureRecognizer实现的一般用例略有不同的事情 更具体地说 我有离散的手势,但我希望他们在手势过程中的特定点发送多条消息(例如,我有一个“循环”手势,每次有新的循环时,我都要发送一条newLoopRecognized消息,并且在手势结束时发送一条allLoopsRecognized消息) 我希望能够在一些消息之后“重置”手势状态,但允许手势识别器仍然接收事件(并且不必移除所有触碰并重新开始手势:每次我发送newLoop

我在自定义手势识别方面遇到了一些问题。我正在尝试做一些与UIGestureRecognizer实现的一般用例略有不同的事情

更具体地说
  • 我有离散的手势,但我希望他们在手势过程中的特定点发送多条消息(例如,我有一个“循环”手势,每次有新的循环时,我都要发送一条
    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
    messageisonalllopsrecogned
    ),并在手势识别器上调用reset
  • 排除需要此手势识别器无法进行检测的手势识别器
问题: 有没有一种方法可以使用常规的UIGestureRecognitor子类来实现我想要的功能,或者我应该重新实现整个手势识别框架?有没有合适的实现示例,或者你知道什么是正确的设计吗?如果我要重新实现整个手势框架,我希望它是向后的与常规手势兼容,允许我使用iOS手势而无需重新实现