我意识到contentsRect
(documentation here)的CALayer
属性允许我们定义用于绘图的图层数量,但我不明白坐标系是如何工作的,我想。
似乎当宽度/高度较小时,用于内容的区域更大,反之亦然。同样,负x,y位置似乎将内容区域向下移动到右侧,这与我的直觉相反。
有人可以解释为什么会这样吗?我确信有一个很好的理由,但我认为我缺少一些图形编程背景。
答案 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
的边缘像素。这在某些情况下很方便,但它不是你自己使用的东西 - 你可以将它与面具或其他一些层结合使用以达到某种效果。