【发布时间】:2013-08-07 12:21:04
【问题描述】:
基本上,我希望能够点击下图中的所有子视图...
我希望能够点击视图 B 的子视图,但即使视图 A 的子视图没有阻止下面的视图,视图 A 也会挡住。这可能吗?换句话说,我希望能够点击视图的透明部分,即使它的框架/边界覆盖了该区域。视图 B 在 ScrollView 中的视图 A 下。
谢谢, 奥斯汀
【问题讨论】:
标签: iphone ios ipad frame hittest
基本上,我希望能够点击下图中的所有子视图...
我希望能够点击视图 B 的子视图,但即使视图 A 的子视图没有阻止下面的视图,视图 A 也会挡住。这可能吗?换句话说,我希望能够点击视图的透明部分,即使它的框架/边界覆盖了该区域。视图 B 在 ScrollView 中的视图 A 下。
谢谢, 奥斯汀
【问题讨论】:
标签: iphone ios ipad frame hittest
解决方案是将视图 A 子类化(如果它还不是自定义视图)并覆盖 pointInside:withEvent。
如果指定点在视图 A 的子视图之一内,则返回 YES,否则返回 NO。当pointInside:withEvent 返回NO 时,系统将继续尝试其他视图,直到找到声称该点在其中的视图,然后它将调用hitTest:withEvent 以查看将触摸发送到哪个内部视图(默认行为)。
【讨论】:
pointInside 的子视图上调用 hitTest - 尽管在子视图上调用 pointInside。这就像“你认为这一点吗?” -> NO -> “好吧,算了吧……” - “这点在你的视野之内吗?” -> YES -> “好的,它在哪个视图中?(命中测试)”。也就是说,hitTest 只有在 pointInside 说 YES 时才会被调用。