【问题标题】:Is it possible to avoid SuperViews when hitTesting?hitTesting时是否可以避免SuperViews?
【发布时间】:2013-08-07 12:21:04
【问题描述】:

基本上,我希望能够点击下图中的所有子视图...

我希望能够点击视图 B 的子视图,但即使视图 A 的子视图没有阻止下面的视图,视图 A 也会挡住。这可能吗?换句话说,我希望能够点击视图的透明部分,即使它的框架/边界覆盖了该区域。视图 B 在 ScrollView 中的视图 A 下。

谢谢, 奥斯汀

【问题讨论】:

    标签: iphone ios ipad frame hittest


    【解决方案1】:

    解决方案是将视图 A 子类化(如果它还不是自定义视图)并覆盖 pointInside:withEvent

    如果指定点在视图 A 的子视图之一内,则返回 YES,否则返回 NO。当pointInside:withEvent 返回NO 时,系统将继续尝试其他视图,直到找到声称该点在其中的视图,然后它将调用hitTest:withEvent 以查看将触摸发送到哪个内部视图(默认行为)。

    【讨论】:

    • 我正在尝试这个,但我从来没有成功... -(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { for (UIView *subview in self.subviews) { UIView *result = [子视图 hitTest:point withEvent:event];如果(结果!= nil){返回是;休息; } } 返回否; }
    • 我明白了...我的子视图正在做一些 hitTesting ,因为它们只响应框架外的标签,但你给了我我需要的东西,谢谢...很好很简单。 .. IOS很棒,你也很棒!
    • 干杯 - 不要在来自 pointInside 的子视图上调用 hitTest - 尽管在子视图上调用 pointInside。这就像“你认为这一点吗?” -> NO -> “好吧,算了吧……” - “这点在你的视野之内吗?” -> YES -> “好的,它在哪个视图中?(命中测试)”。也就是说,hitTest 只有在 pointInsideYES 时才会被调用。
    猜你喜欢
    • 2018-10-04
    • 1970-01-01
    • 2020-08-11
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多