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

Ste*_*ley 6 macos core-animation core-graphics objective-c ios

我意识到(文档在这里)的contentsRect属性允许我们定义用于绘图的层的多少,但我不知道坐标系是如何工作的.CALayer

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

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

Kur*_*vis 19

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

不,你错误地思考它.

所述contentsRect指定哪一部分所述的contents图像将显示在该层中.

然后根据contentsGravity属性将该部分布置在层中.

如果是kCAGravityResize默认值,则会调整零件的大小以适合图层.这可以解释你所看到的违反直觉的行为 - 你做得contentsRect更小,但是图层看起来大小相同,并且它似乎在图像的选定部分"放大".如果设置contentsGravitykCAGravityCenter,则可能会更容易理解,但不会调整大小.

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

(如果你愿意的话,可以把这些视为百分比 - 如果你contentsRect有这个百分比{0.5, 0.5},你选择的是50%contents.)

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