2012-10-03 53 views
1

我有两个UIViews。我用一个包含另一个,以便我可以在另一个中滑动一个。我遇到了一个问题,即使子视图被剪切到其父项的边界,它仍然会接收触摸事件并阻止访问其他基础视图。UIView clipToBounds不停止接收父视图外的子视图

我有三个截图显示布局。我已将父母绿色和孩子着色为红色。

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

我已经启用了clipToBounds,所以我不明白为什么子视图会阻止底层的UITabBar。我对clipToBounds的理解完全错误吗?

+0

危险!用太阳眼镜看这个问题 – jomafer

+1

对不起。颜色是*小*亮 – tomasmcguinness

回答

2

使用clipToBounds只会影响子视图的可视化布局,而不会影响逻辑布局。这意味着虽然我的子视图看不到眼睛,但触摸是可见的。

我已经通过动画subView的大小而不是其位置来解决此问题。在我的代码下面,stationProximityView是子视图。我将它的大小设置为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机型的问题。

相关问题