如何针对任何点(中心除外)旋转UIImageView?

10 iphone cocoa-touch core-animation uikit

默认情况下,UIImageView将仅围绕其中心旋转.如何让它围绕图像中的任何其他点旋转?

Bra*_*son 18

一种方法是通过更改UIImageView底层的anchorPoint并围绕它旋转.您可以使用以下内容更改旋转点:

imageView.layer.anchorPoint = CGPointMake(0.25, 0.25);
Run Code Online (Sandbox Code Playgroud)

anchorPoint是根据图层内的相对坐标定义的.也就是说,(0,0)是图层的左上角(在iPhone上,UIView图层翻转Y坐标),(1,1)是右下角.

移动anchorPoint可能会移动您的图像,因此您可能需要在之后调整其位置.

要围绕该新锚点旋转图像的图层,可以使用以下内容更改图层的CATransform3D结构:

CATransform3D rotatedTransform = imageView.layer.transform;
rotatedTransform = CATransform3DRotate(rotatedTransform, 60.0 * M_PI / 180.0, 0.0f, 0.0f, 1.0f);
imageView.layer.transform = rotatedTransform;
Run Code Online (Sandbox Code Playgroud)

此示例围绕锚点进行60度的增量旋转.

默认情况下,对图层的所有更改都进行动画处理.您可以通过将更改包含在CATransaction中来禁用此动画,如下所示:

[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];    

// Code for changes here

[CATransaction commit];
Run Code Online (Sandbox Code Playgroud)

  • 在这里为我未来的自我添加一些注释:`#import <QuartzCore/CATransform3D.h> #import <QuartzCore/CALayer.h>`你还需要导入`QuartzCore`框架.谢谢. (2认同)