Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Core Animation rotating a layer around arbitrary point

How can I rotate a layer using Core Animation around an arbitrary point? ( In my case a point that is not inside the layer I want to rotate )

I prefer doing this without changing the anchor point, because unless I get something wrong every time I change the anchor point it also changes the position of the layer.

I tried something like that but it didn't work:

[UIImageView beginAnimations:nil context:nil];
CATransform3D rotationTransform = CATransform3DIdentity;
rotationTransform = CATransform3DTranslate(rotationTransform, 0.0, -100.0, 0.0);
rotationTransform = CATransform3DRotate(rotationTransform, DegreesToRadians(180),
                        0.0, 0.0, 1.0);
rotationTransform = CATransform3DTranslate(rotationTransform, 0.0, 100.0, 0.0)
shape1.layer.transform = rotationTransform;
[UIImageView commitAnimations];

It looks like the rotation axis is moving during the rotate.


1 Answers

Your solution is fine but the 'expected way' is to use the anchor point.

It is moving around when you set the anchor point because the position is attached to the anchor point, i.e. setting the position sets where the anchorPoint is in the superlayer's coord system.

Probably not worth changing since you have something working, but just something to add to the grey matter for next time.

Good luck!

like image 148
tekniskt Avatar answered Dec 14 '25 18:12

tekniskt



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!