iOS 7 - 透明的UIView阻止手势识别器

时间:2013-10-04 04:14:39

标签: uiview ios7 uitapgesturerecognizer

我有2个视图作为主视图的子视图。

主要观点 | | ---查看A. | | ---查看B

我在视图A中有一个带框架(0,0,50,50)的按钮, 以及在视图B中具有框架(200,200,50,50)的按钮。

视图A和视图B具有nil backgroundColor(因此它们都是透明的)。

所有观点都有相同的框架。

我希望能够点击两个按钮,但只能点击视图B中的按钮。 iOS 6并非如此。

有什么想法吗?

丑陋的解决方案:

我找到了解决问题的方法,我所要做的就是让我的视图A和视图B成为PassThroughUIView,但这是一个非常难看的解决方案,我想知道是否有一个更好的,一个不涉及改变我的观点。

@implementation PassThroughUIView

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
    for (UIView *v in self.subviews) {
        CGPoint localPoint = [v convertPoint:point fromView:self];
        if (v.alpha > 0.01 && ![v isHidden] && v.userInteractionEnabled && [v pointInside:localPoint withEvent:event])
            return YES;
    }
    return NO;
}

@end

1 个答案:

答案 0 :(得分:2)

我提出的唯一解决方案是UIView的子类并实现它:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
    for (UIView *v in self.subviews) {
        CGPoint localPoint = [v convertPoint:point fromView:self];
        if (v.alpha > 0.01 && ![v isHidden] && v.userInteractionEnabled && [v pointInside:localPoint withEvent:event])
            return YES;
    }
    return NO;
}

这个UIView将是一个"通过视图"