【发布时间】:2014-04-11 02:36:59
【问题描述】:
我有一个 UIView,它有两个子视图,一个是 UIScrollView,另一个是其他几个子视图的容器视图。容器视图完全覆盖了滚动视图。
需要处理手势的视图:
- UIScrollView - 应该处理默认的捏和平移手势
- 容器视图 - 无
- 容器视图子视图 - 应该处理点击手势
现在为了让容器视图子视图处理点击手势,我为容器视图实现了 pointInside:withEvent:。如果它识别出该点位于其子视图之一内,则返回 YES。这工作正常。问题是当我捏或平移并且我的手指最初触摸容器视图子视图之一时它不起作用。当我在容器视图的空白区域上捏或平移时,它会正常工作。
有什么建议可以让它发挥作用吗?
编辑:
我已经为主视图实现了 hitTest:withEvent: 并获得了相同的行为。
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
UIView *hitTestView;
for (UIView *subview in [self.subviews reverseObjectEnumerator])
{
hitTestView = [subview hitTest:[self convertPoint:point
toView:subview]
withEvent:event];
if (hitTestView && ![hitTestView isKindOfClass:[ContainerView class]])
{
break;
}
}
return hitTestView;
}
归根结底,这里的问题是一个视图如何只处理一些手势并传递其他手势,以便底层视图可以处理它们。
我已经阅读了很多关于该主题的内容并尝试了不同的方法,但找不到一个简单的解决方案来解决这个看似很常见的问题。
【问题讨论】:
标签: ios uigesturerecognizer siblings