我对响应不正确子视图的手势识别器有疑问,有啥问题?
Posted
技术标签:
【中文标题】我对响应不正确子视图的手势识别器有疑问,有啥问题?【英文标题】:I have a problem with gesture recognizers responding to incorrect subviews, what gives?我对响应不正确子视图的手势识别器有疑问,有什么问题? 【发布时间】:2011-05-24 05:28:34 【问题描述】:我有一个名为 ImageViewController 的父视图。在这个视图中,我最多添加了两个名为 ImageDetailViewController 的子视图。在这个细节视图控制器中,我声明了一些需要在它们各自的视图上执行某些操作的手势。代码如下:
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(changeModeButtonPushed:)];
[tap setNumberOfTapsRequired:2];
[tap setNumberOfTouchesRequired:1];
[tap setDelegate:self];
[openGLView addGestureRecognizer:tap];
[tap release];
UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(touchDidDrag:)];
[panRecognizer setMaximumNumberOfTouches:1];
[openGLView addGestureRecognizer:panRecognizer];
[panRecognizer release];
UIPanGestureRecognizer *shiftRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(shiftView:)];
[shiftRecognizer setMinimumNumberOfTouches:2];
[openGLView addGestureRecognizer:shiftRecognizer];
[shiftRecognizer release];
UIPinchGestureRecognizer *pinchRecog = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(viewPinched:)];
[openGLView addGestureRecognizer:pinchRecog];
[pinchRecog release];
因此,我需要在此父视图中将这些详细视图中的两个彼此相邻加载,然后我需要能够在一个视图或另一个视图上执行这些手势,并让该视图响应。
问题是当我用一根手指平移时,有时它会调用它应该调用的视图,但大多数情况下,它会触发另一个视图!这没有任何意义!我已经尝试过调试以及我能想到的所有其他事情,但我就是看不出两个单独声明的对象是如何像这样混在一起的。
为了让事情变得更奇怪,有些手势确实可以正常工作。因此,只有这一个手指平移手势才能搞砸一切。
我可能会错过什么?我怎么能调试这个?一切看起来就像这些对象确实是分开的,但它们的行为并不是那样......
【问题讨论】:
这些详细视图是什么样的? 【参考方案1】:您可以通过找出手势识别器正在调用的视图来调试/解决此问题:看看这段代码:
(void)NAMEOFFUNCTION:(UITapGestureRecognizer*)识别器
if ([yourViewController.view pointInside:[recognizer locationInView:presentationSlideViewController.view] withEvent:nil])
过滤所有子视图,在这个例子中,我检查手指触摸是否低于定义的 x 和 y 坐标。首先检查该点是否在_buttonVIew子视图内://
if ([_buttonView pointInside:[recognizer locationInView:_buttonView] withEvent:nil])
然后查看触摸是否在低于50的坐标
if (([recognizer locationInView:_buttonView].x < 50) && ([_leftArrow isEnabled]))
pageIndex -= 1;
//otheriwse check to see if its over 970
else if (([recognizer locationInView:_buttonView].x > 970) && ([_rightArrow isEnabled]))
pageIndex += 1;
[self scrollViewScrollToRect:pageIndex];
[self fadeArrows:1.0];
return;
【讨论】:
以上是关于我对响应不正确子视图的手势识别器有疑问,有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章