有人可以向我解释CALayer contentsRect属性的坐标系吗?

时间:2012-04-12 05:15:16

标签: objective-c ios macos core-animation core-graphics

我意识到contentsRectdocumentation here)的CALayer属性允许我们定义用于绘图的图层数量,但我不明白坐标系是如何工作的,我想。

似乎当宽度/高度较小时,用于内容的区域更大,反之亦然。同样,负x,y位置似乎将内容区域向下移动到右侧,这与我的直觉相反。

有人可以解释为什么会这样吗?我确信有一个很好的理由,但我认为我缺少一些图形编程背景。

1 个答案:

答案 0 :(得分:19)

  

CALayer的contentsRect属性(此处的文档)允许用户定义用于绘制的图层数量

不,你正在考虑错误。

contentsRect指定 contents图片的部分将显示在图层中。

然后根据contentsGravity属性将该部分排列在图层中。

如果这是默认值kCAGravityResize,则会调整部分的大小以适合图层。这可以解释您所看到的违反直觉的行为 - 您使contentsRect更小,但图层看起来大小相同,并且它似乎在图像的选定部分“放大”。如果将contentsGravity设置为kCAGravityCenter,则可能会更容易理解,但不会调整大小。

大多数情况下,您会将contentsRect设置为身份rect { {0, 0}, {1, 1} }的某个子矩形,因此您选择只查看部分内容。

(如果您愿意,可将其视为百分比 - 如果contentsRect的尺寸为{0.5, 0.5},则您选择contents的50%。

如果contentsRect的一部分超出了标识矩形,则CA会向外扩展contents的边缘像素。这在某些情况下很方便,但它不是你自己使用的东西 - 你可以将它与面具或其他一些层结合使用以达到某种效果。