首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在UIGestureRecognizer完成后执行

在UIGestureRecognizer完成后执行
EN

Stack Overflow用户
提问于 2011-07-20 01:37:48
回答 2查看 324关注 0票数 2

我有2个GestureRecognizers,当触发时,同样需要触发动画。

我有两个布尔值,每个布尔值一个,当手势被识别时,它们被设置为yes。

我的问题是,我需要能够在一个识别器中进行检查,以查看另一个识别器是否已被触发。

我目前做了以下工作

代码语言:javascript
复制
[self registerRecognizer:swipeRecognizerRight 
       onRecognizedBlock:^(UIGestureRecognizer *recognizer) {
    NSLog(@"pulled to right");
    leftPulled = TRUE;

    if (rightPulled) {
        [self->delegate executeActionString:someAnimation];       
    }

    leftPulled = FALSE;
}];

右侧的识别器也是如此。

leftPulled和rightPulled是实际的对象,一个在左边,一个在右边。

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-20 02:10:24

我认为,您将在UIGestureRecognizerDelegate协议方法中找到自己的方法:

代码语言:javascript
复制
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)g1
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)g2;

在您的示例中,此方法在两种情况下都应返回YES ( ...:g1 ...:g2...:g2 ...:g1 ),以便同时识别这两个手势,可以以g1g2开头。

票数 3
EN

Stack Overflow用户

发布于 2011-07-20 02:11:07

你关于计时器的想法可能是正确的。您需要提出一个阈值持续时间,并简单地使用performSelector:afterDelay:GCD and a block* (链接到SO问题)来重置您的标志:

代码语言:javascript
复制
int64_t threshold = 1000000;    // In nanoseconds
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, threshhold),     
               dispatch_get_main_queue(), 
               ^{ leftPulled = FALSE; });

*我相信对于非常小的延迟,它比NSTimer有更多的准确性,尽管我不确定。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6751513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档