objective-c - subview 计入根 CALayer 的子层吗?

标签 objective-c uikit uiview calayer

今天我注意到,当我在我的 UIView 实例中运行以下代码时,向我的 View 添加 1 个 CALayer 和 2 个 subview :

[self.layer.sublayers count]

这将返回3。这是否意味着 subview 也被视为子层?如果我只想要在 sublayers 调用中绘制的 CALayers,我该怎么做?

最佳答案

是的,每个 UIView 都有一个底层 CALayer,当 View 添加到 super View 时,它会添加到其 super View 的图层中。

我不知道只找到您自己的图层的理想方法。由于 sublayers 是一个 NSArray (与 NSSet 相反),这意味着它是一个有序列表,这意味着您可以确定顺序将 View 添加到 super View 的顺序与它们在所述数组中出现的顺序相同。

因此,如果您先添加 UIView,然后添加您自己绘制的 CALayers,您可能可以通过访问子层中从索引 2 开始(跳过 0 和 1)的对象来获得自己的 CALayers。 。

当然,如果您随后向 super View 添加或删除 View ,则必须修改此值,因此假设这实际上有效,您将需要以某种方式动态生成它。

您可以在添加图层时使用 sublayers 属性上的 indexOfObject: 来确定图层的索引。更安全的路线可能是简单地将此索引存储在列表中的某个位置,并仅使用该列表中的索引访问子层。

关于objective-c - subview 计入根 CALayer 的子层吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3254639/

相关文章:

iOS:如何确定 ScrollView 中对象的 CGPoint

ios - subview 调整大小至全屏

ios - 当 CNContact 保存联系人时联系人图像不发送

objective-c - iOS 5 中的 Offscreen UITextView 不可见/明文

iphone - 为什么调用 insertRowsAtIndexPaths : call heightForRow for all rows?

ios - 是否可以在 block 中绘制 CGContext ?

ios - iOS 延迟实例化的缺点

ios - 重写 UITextField 委托(delegate)方法

Iphone 应用程序开发 - 如何重新加载(?) View ?

ios - 在 SwiftUI 的 UITextView 中禁用向上滚动