为啥转换后的 UIView 会与层次结构中较高的其他视图重叠?

Posted

技术标签:

【中文标题】为啥转换后的 UIView 会与层次结构中较高的其他视图重叠?【英文标题】:Why does a transformed UIView overlap other views that are higher in the hierarchy?为什么转换后的 UIView 会与层次结构中较高的其他视图重叠? 【发布时间】:2014-05-09 16:44:58 【问题描述】:

我有一个视图,我对其应用了转换 - 更改了 m34 字段,在 x 轴上旋转它并在 x 和 y 上缩放它。然后我将此视图添加到更大的超级视图中。我的问题是,我添加到更大的超级视图中的所有其他视图都被转换后的视图隐藏或重叠(如果新视图的框架与转换后的视图的框架相交),即使新视图在层次结构中的位置高于转换后的视图和那些新视图被添加到较大超级视图的 subviews 数组的末尾。任何想法这种行为背后的原因是什么? :-) 非常感谢!

【问题讨论】:

【参考方案1】:

3D 变换用于制作伪 3D。在这个 3D 空间中,您的图层与其他图层重叠。要改变它的 z-pozition 使用 CAlayer 的属性

@property CGFloat zPosition;

图层在 z 轴上的位置。动画。默认值为 此属性为 0。更改此属性的值会更改 屏幕上层的从前到后的顺序。这可能会影响 框架矩形重叠的图层的可见性。这个的价值 属性以点为单位。

【讨论】:

【参考方案2】:

视图层次结构就像一系列的纸——它们可以“重叠”在一起,但没有真正的深度。一旦你在一个图层上放置了一个 3D 变换,它就会有一些深度,如果你围绕 x 轴旋转它,它就会突出到其他视图的前面。

您可以尝试调整图层的 z 位置以将其移到其他视图后面。

【讨论】:

以上是关于为啥转换后的 UIView 会与层次结构中较高的其他视图重叠?的主要内容,如果未能解决你的问题,请参考以下文章

子视图的子层与更高的子视图重叠

ats 分层缓存

布局中较高的按钮

2017-2018-1 20155332 《信息安全系统设计基础》第九周学习总结

jvm调优

为啥我在 UIScrollView 中的 UIView 不滚动?