【发布时间】:2019-03-19 15:06:03
【问题描述】:
作为这篇文章的标题,我在this 帖子中找到了关于“我们可以将 UIView 的子视图放在其 CALayer 前面”的答案,但我找不到为什么的答案就是这样。在我看来,将视图作为图层视图的子视图仅表明子视图和图层之间的“更强”顺序。谁能给我解释一下?
【问题讨论】:
作为这篇文章的标题,我在this 帖子中找到了关于“我们可以将 UIView 的子视图放在其 CALayer 前面”的答案,但我找不到为什么的答案就是这样。在我看来,将视图作为图层视图的子视图仅表明子视图和图层之间的“更强”顺序。谁能给我解释一下?
【问题讨论】:
每个视图都由 CALayer 支持,层树是视图树的超集。因此,您添加到视图的每个子视图都会将其相应的图层添加到其父视图的图层中。由于它是父层的子层,并且层是从树的顶部向下渲染的,因此您无法更改渲染顺序。
【讨论】:
对于任何为此奋斗的人。 您的子视图在父图层下的原因可能是因为您先添加子视图,然后再添加父图层。
你做了什么:
parentView.addSubview(childView)
parentView.layer.addSublayer(someLayer)
// This makes someLayer on top of subview.
你想要什么:
parentView.layer.addSublayer(someLayer)
parentView.addSubview(childView)
// This makes the subview on top of someLayer
要回答您的问题,决定视图之间 z 顺序的唯一因素是您添加图层或视图的顺序。 我认为 addSubview 只是在本机实现下将子层添加到父视图。
【讨论】: