2010-10-26 77 views
5

我目前与UIGestureRecognizers有一些冲突,导致所有事情互相妥协。我有几个方块(UIView)在屏幕上,让用户平移和捏(用于缩放视图)。我有一个UIPinchGestureRecognizer添加到主视图中添加方块,以便我可以缩放焦点的方块。我还为每个方块添加了UIPanGestureRecognizers,以便它可以在屏幕中移动。这个问题表现出来,当我捏手来缩放选定的正方形,而我的手指正在移动其他的正方形时。基于我的调试,看起来如果我捏的手指穿过没有聚焦的正方形,他们会吃掉抵消捏手势的触摸。使用“[pan requireGestureRecognizerToFail:捏]”给出了捏优先级,但创建和发布,因为连续的泛识别器不再触发。我也尝试将UIPinchRecognizer直接添加到正方形中,但这种方法有效,但是手势具有限制在正方形范围内,如果正方形缩小得太多,该方法效果不佳。有没有解决的办法?我错过了什么?iPhone - 与多个UIGestureRecognizers发生冲突

+0

该应用听起来类似于[Touches_GestureRecognizers](http://developer.apple.com/library/ios/#samplecode/Touches/Introduction/Intro.html%23//apple_ref/ doc/uid/DTS40007435)来自Apple的示例应用程序。它与广场做同样的事情,似乎没有相同的问题。 – Anna 2010-10-26 19:15:04

+0

@ aBitOvious:谢谢,示例代码其实很不错。 @ Tim:我现在没有设置代表,所以我一定会研究这个问题,因为它应该允许控制谁吃什么。一旦我深入了解源代码,我就会知道更多。 – Dave 2010-10-26 20:02:50

+0

我刚刚合并了所有六个基于cookie的帐户(并清理了所有这些内容 - 管理员的生活从未如此简单)。请考虑注册此帐户。 – Will 2011-02-28 18:25:04

回答

3

解决您的问题的一种方法是为您的所有UIGestureRecognizers(可能是此视图的UIViewController)设置一个通用代理。如果捏手势识别器处于“开始”或“改变”状态(意味着它正在识别并处理捏),该委托可以为gestureRecognizerShouldBegin返回NO:(UIGestureRecognizer *)gestureRecognizer。这应该防止任何平移手势识别器在捏手势过程中吃东西。

在接口文件中,你将需要保存缩放手势识别一个参考:

@interface MyViewController : UIViewController <UIGestureRecognizerDelegate> { 
    UIGestureRecognizer *pinchGestureRecognizer; 
} 

并在实施,请务必检查缩放手势识别器的状态,手势的不在状态识别器被传递:

@implementation MyViewController 

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer 
{ 
    if(pinchGestureRecognizer.state == UIGestureRecognizerStateBegan || 
    pinchGestureRecognizer.state == UIGestureRecognizerStateChanged) 
    { 
    return NO; 
    } 
    else 
    { 
    return YES; 
    } 
} 
+0

@ Tim:这很棒!我想我的脑海里有太多的其他场景在运行,出于某种原因,我不清楚,但这完全合理。非常感谢!顺便说一句,你如何回答答案或编辑你的帖子?你必须登录吗?我只是使用名称字段。再次感谢。 – Dave 2010-10-28 07:11:43

+0

查看堆栈溢出常见问题“什么是声誉?”简而言之,您可以通过询问和回答好问题来赢得其他用户的声誉。在某些门槛,您可以获得编辑和评论等特权。你已经赢得了一些代表(你的名字旁边的13),因为有人“投了”这个问题(你的问题旁边的1)。 – 2010-10-28 19:07:20

+0

实际上,既然你问了这个问题,你应该能够在每个答案下面的“添加评论”链接上评论任何答案,即使你没有太多的代表。通常这就是人们如何回答问题而不是像你一样做出新的答案,但不用担心... – 2010-10-28 19:10:25