在UIGestureRecognizer完成后执行

时间:2011-07-19 17:37:48

标签: iphone objective-c uigesturerecognizer

我有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是实际的对象,一个在左边,一个在右边。

我的问题是,一个识别器会在另一个识别器之前执行,因此在识别它们并触发动画时永远不会出现这种情况。

如何解决这个问题?某种计时器,或者有没有办法对识别器进行编码,以便可以同时识别两者然后触发动画?

2 个答案:

答案 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更准确。