UIView clipToBounds 没有停止子视图接收父视图之外的触摸
Posted
技术标签:
【中文标题】UIView clipToBounds 没有停止子视图接收父视图之外的触摸【英文标题】:UIView clipToBounds is not stopping a subView receiving touches outside the parent view 【发布时间】:2012-10-03 17:56:37 【问题描述】:我有两个 UIView。我正在使用一个来包含另一个,以便我可以将一个滑入另一个。我遇到了一个问题,即使子视图被剪辑到其父视图的边界,它仍会接收触摸事件并阻止对其他底层视图的访问。
我有三个显示布局的屏幕截图。我已将父级着色为绿色,将子级着色为红色。
这个想法是用户点击“查看”并且子视图向上滑动。 subView在默认位置时,UITabBar被覆盖,无法点击。您可以在底部出现红色视图的第一张图像中看到这一点。当 subView 移到顶部时,可以单击 UITabBar,因为它现在可见。在第三张图片中,我展示了在绿色 UIView 上启用 clipToBounds 的情况。
我已经启用了 clipToBounds,所以我不明白为什么 subView 会阻塞底层的 UITabBar。我对clipToBounds的理解完全错了吗??
【问题讨论】:
危险!戴墨镜看这个问题???? 很抱歉。颜色有点有点亮???? 【参考方案1】:使用 clipToBounds 只会影响 subView 的视觉布局,不会影响逻辑布局。这意味着虽然我的 subView 肉眼不可见,但触摸可见。
我已经通过动画子视图的大小而不是它的位置来解决这个问题。在我下面的代码中,stationProximityView 是 subView。我将其大小设置为 40 像素的动画,以使黑色标题重新出现。
[UIView beginAnimations:@"stationProximityBar" context:NULL];
self.stationProximityView.view.frame = CGRectOffset(self.stationProximityView.view.frame, 0, -40);
[UIView commitAnimations];
当我不再需要它时,我会将其制作成动画。
[UIView beginAnimations:@"stationProximityBar" context:NULL];
self.stationProximityView.view.frame = CGRectMake(0 ,0, 320, 500);
[UIView commitAnimations];
如果用户点击视图按钮,则显示整个子视图:
[UIView beginAnimations:@"stationProximityBar" context:NULL];
self.stationProximityView.view.frame = CGRectMake(0,460,320,40);
[UIView commitAnimations];
关闭会导致视图以与小栏相同的方式隐藏。
[UIView beginAnimations:@"hideStationProximityBar" context:NULL];
self.stationProximityView.view.frame = CGRectMake(0,0,320,500);
[UIView commitAnimations];
目前,此代码仅在 iPhone 5 上进行测试,因此 500 的硬编码高度会导致以前的 iPhone 型号出现问题。
【讨论】:
以上是关于UIView clipToBounds 没有停止子视图接收父视图之外的触摸的主要内容,如果未能解决你的问题,请参考以下文章
WPFのclipToBounds与maskToBounds的区别