【发布时间】:2011-06-15 17:32:42
【问题描述】:
我有一堆 UIView,如下图所示。红色/粉色(半透明)视图位于其他视图之上。
- 红色有一个
UISwipeGestureRecognizer。 - 格林拥有
UITapGestureRecognizer。 - 蓝色没有识别器。
点击绿色的可见(左下)部分会触发其识别器。
轻按绿色的隐藏部分不会触发其识别器(红色会阻止它)。
这就是问题所在:我希望 Green 触发。我该怎么做?
在实践中,视图可以是任意顺序,任意数量,并且是彼此的子视图等。但问题是一样的:
我怎样才能可靠地找到可以处理手势(点击或滑动)的最上面的视图?
我尝试使用下面的代码。它巧妙地遍历所有视图,但它失败了,因为它不知道该事件是滑动还是点击的一部分。所以该方法总是返回红色视图。如果我从 Red 中删除 swipe-recognizer,则代码可以正常工作。
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
UIView *hitView = [super hitTest:point withEvent:event];
if (hitView == self)
{
if (self.hasASwipeRecognizer)
return self; // What if this was a tap?
if (self.hasATapRecognizer)
return self;
else
return nil;
}
else
return hitView;
}
【问题讨论】:
标签: iphone cocoa-touch uiview uigesturerecognizer