I realize that the contentsRect
property of CALayer
(documentation here) allows one to define how much of the layer to use for drawing, but I do not understand how the coordinate system works, I think.
It seems that when the width/height are smaller, the area used for content is bigger and vice versa. Similarly, negative x,y positions seem to move the content area down and to the right which is the opposite of my intuition.
Can someone explain why this is? I'm sure there is a good reason, but I assume I'm missing some graphics programming background.
the contentsRect property of CALayer (documentation here) allows one to define how much of the layer to use for drawing
No, you're thinking about it incorrectly.
The contentsRect
specifies which part of the contents
image will be displayed in the layer.
That part is then arranged in the layer according to the contentsGravity
property.
If this is kCAGravityResize
, the default, this will cause the part to be resized to fit the layer. That would explain the counterintuitive behavior you're seeing -- you make contentsRect
smaller, but the layer appears to be the same size, and it appears to "zoom in" on the selected part of the image. You might find it easier to understand if you set contentsGravity
to kCAGravityCenter
, which won't resize.
Most of the time, you would set the contentsRect
to some sub-rect of the identity rect { {0, 0}, {1, 1} }
, so you choose to see only part of the contents.
(Think of these as percentages if you like -- if contentsRect
has a size of {0.5, 0.5}
, you're choosing 50% of the contents
.)
If part of the contentsRect
goes outside the identity rect, then CA will extend the edge pixels of the contents
outwards. This is handy in some cases, but it's not something you'd use on its own -- you'd use it in combination with a mask or with some other layers to achieve some effect.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With