1

我有两个 UIView。我正在使用一个来包含另一个,以便我可以将一个滑入另一个。我遇到了一个问题,即使子视图被剪辑到其父视图的边界,它仍然会接收触摸事件并阻止对其他底层视图的访问。

我有三个显示布局的屏幕截图。我已将父级着色为绿色,将子级着色为红色。

这个想法是用户单击“查看”并且子视图向上滑动。subView在默认位置时,UITabBar被覆盖,无法点击。您可以在底部出现红色视图的第一张图像中看到这一点。当 subView 移到顶部时,可以单击 UITabBar,因为它现在可见。在第三张图片中,我展示了在绿色 UIView 上启用 clipToBounds 的情况。

我启用了 clipToBounds,所以我不明白为什么 subView 会阻塞底层的 UITabBar。我对 clipToBounds 的理解完全错误吗?

4

1 回答 1

2

使用 clipToBounds 只会影响 subView 的视觉布局,不会影响逻辑布局。这意味着虽然我的 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 型号出现问题。

于 2012-10-11T10:15:27.020 回答