问题理解 CALayer 几何。需要帮助

Posted

技术标签:

【中文标题】问题理解 CALayer 几何。需要帮助【英文标题】:Issue understanding CALayer Geometry. Need Assistance 【发布时间】:2012-03-15 13:31:37 【问题描述】:

我正在尝试了解 calayer 几何,但在理解这一点时遇到了问题

位置(我很清楚)

界限 (Apple docs 说)bounds 属性是一个 CGRect,它提供层的大小(bounds.size)和原点(bounds.origin)。

边界原点用作图形上下文的原点,当 覆盖图层的绘图方法。

关于边界,我没有明白这一点。

框架 (Apple 文档说)

图层有一个隐含的框架,它是位置的函数, 边界、锚点和变换属性。设置新框架 矩形更改图层的位置和边界属性 适当地,但框架本身没有被存储。当一个新框架 指定矩形边界原点不受干扰,而 bounds size 设置为框架的大小。图层的位置是 设置为相对于锚点的正确位置。当你拿到时 frame 属性值,它是相对于位置计算的, bounds 和 anchorPoint 属性。

但这比Stanford university lecture slide 19 更复杂和不同

AnchorPoint 这到底是在玩边界……让我头晕目眩

需要帮助。

谢谢,问候。

【问题讨论】:

问题是我在理解这个 calayer 几何概念时遇到问题 Stack Overflow 最适合解决特定问题...您还有比“我不明白”更进一步的问题吗? 【参考方案1】:

每个视图都有自己的坐标系。

任何视图的坐标系都以 (0,0) 为原点。因此,任何视图的边界都是该坐标系的“边界”,即。 (0, 0, 宽度, 高度)。

任何视图的位置都是根据父视图的坐标系或superview 计算的。这是任何视图的框架,因此将是 (x, y, width, height),其中 x 和 y 表示左上角或左上角在父坐标系中的位置。

ios 文档使用这张图片解释了这一点

对于最后一个,由于 AnchorPoint 在视图“内部”,它在视图的坐标系中表示,因此必须使用边界,就像 center 属性一样。

对于 CALayer 也是如此,其中层的边界在它们自己的坐标系中定义,它们的框架由它们的父视图定义。有很多差异,有些是直接的,比如图层有更深的控制,您可以设置 zordering 并有一个用于处理变换的锚点等。有些是微妙的,例如 CALayer 的 frame 属性是不可动画(即在动画块中更改它没有效果)。

而且,我建议您尝试使用较小的程序来了解差异,而不仅仅是尝试从一两本书中获取所有内容,甚至是这样。

【讨论】:

我的 uiview 文档也与核心动画 calayer 并排打开,但苹果说“虽然图层和图层树在许多方面类似于视图和视图层次结构,但指定了图层的几何图形以不同的,通常更简单的方式。图层的所有几何属性,包括图层的变换矩阵,都可以隐式和显式地动画化。“视图和图层几何图形是不同的。它们之间有什么区别?感谢您的回复。

以上是关于问题理解 CALayer 几何。需要帮助的主要内容,如果未能解决你的问题,请参考以下文章

理解 CALayer ContentsCenter 属性

CALayer及其子类

什么时候可以使用 CALayer.timeOffset

如何仅在三个侧面设置 UITextField 边框/CALayer 边框 ios

随机“CALayerInvalidGeometry原因:CALayer位置包含NaN”异常

Calayer子类问题