我有2个GestureRecognizers,当触发同样需要触发动画时。
我有2个布尔值,每个1个,当识别出手势时设置为“是”。
我的问题是我需要能够在一个识别器中检查是否已触发其他识别器。
我目前正在执行以下操作
[self registerRecognizer:swipeRecognizerRight
onRecognizedBlock:^(UIGestureRecognizer *recognizer) {
NSLog(@"pulled to right");
leftPulled = TRUE;
if (rightPulled) {
[self->delegate executeActionString:someAnimation];
}
leftPulled = FALSE;
}];
和右边的识别器相同。
leftPulled和rightPulled是实际的对象,一个在左边,一个在右边。
我的问题是,一个识别器会在另一个识别器之前执行,因此在识别它们并触发动画时永远不会出现这种情况。
如何解决这个问题?某种计时器,或者有没有办法对识别器进行编码,以便可以同时识别两者然后触发动画?
答案 0 :(得分:3)
我会用UIGestureRecognizerDelegate
协议方法找到你的想法:
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)g1
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)g2;
在您的情况下,此方法应在两种情况下(YES
和...:g1 ...:g2
)返回...:g2 ...:g1
,以便同时识别两个手势,或者以{{1开头},或g1
。
答案 1 :(得分:0)
你对计时器的想法可能是正确的。您需要提出一个阈值持续时间,只需使用performSelector:afterDelay:
或GCD and a block *(链接到SO问题)重置您的标记:
int64_t threshold = 1000000; // In nanoseconds
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, threshhold),
dispatch_get_main_queue(),
^{ leftPulled = FALSE; });
*虽然我不确定,但我认为对于非常小的延迟而言比NSTimer
更准确。