【问题标题】:UIimageView rotate around a pointUIimageView 围绕一个点旋转
【发布时间】:2025-12-17 00:50:02
【问题描述】:

我有一张图像(一条直线),并试图从特定点以某个角度旋转它。发生的情况是图像从自身的中心点旋转。我不想让图像的底部保持不变并以我想要的角度旋转,就像在时钟的情况下一样。 我用

Compass2.layer.anchorPoint= CGPointMake(0.5,1);
[Compass2 setTransform:CGAffineTransformMakeRotation(XXXX)];

但是它显示访问属性的未知“achorPoint”组件。 谁能给我一些解决方案

【问题讨论】:

  • 你完成#import <QuartzCore/QuartzCore.h>了吗?

标签: uiimageview transform rotation iphone


【解决方案1】:

CGAffineTransform 只是一个描述旋转、平移和缩放的矩阵。

记住你可以使用

CGAffineTransform CGAffineTransformConcat ( CGAffineTransform t1, CGAffineTransform t2 );

链接变换。这基本上只是意味着您将转换矩阵相乘。

既然你知道,标准的 Rotation 只是围绕 UIImageView 的中心旋转,你可以将你的任务分成 3 个部分,

  1. 移动到旋转点
  2. 旋转
  3. 后退

并将它们链接起来。

CGAffineTransform t = imageView.transform;
CGPoint p = rotationPoint - imageView.center;
imageView.transform = CGAffineTransformTranslate(
CGAffineTransformRotate( CGAffineTransformTranslate(t, p.x, p.y), angle) , -p.x, -p.y);

我没有测试这段代码,但是你应该通过这种方式得到一个解决方案。

编辑:我也意识到我没有使用串联。如果使用“CGAffineTransformMake...”,则需要使用串联。我只是把功能放在一起。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。正如“aBitObvious”所指出的,您必须导入 QuartzCore 框架才能访问 CALayer 类的 anchorPoint 属性。

    #import <QuartzCore/QuartzCore.h>
    

    【讨论】:

      【解决方案3】:

      它给你的错误意味着你试图设置一个不存在的属性。你拼错了'anchorPoint'吗?如果不是这种情况,并且您的问题只是错字,请仔细检查您的类型。您的“Compass2”应该是某种 UIView,它的“层”应该是 CALayer 对象。

      【讨论】:

        【解决方案4】:

        您可能无法通过仅导入来访问视图的属性 anchorPoint

        #import <QuartzCore/QuartzCore.h>
        

        即;

        Compass2.layer.anchorPoint= CGPointMake(0.5,1);
        

        为此,您必须在实现文件的开头编写以下导入语句。

        #import <QuartzCore/CALayer.h> 
        

        现在您将能够编写以下代码而不会产生任何错误。

        Compass2.layer.anchorPoint= CGPointMake(0.5,1);
        

        【讨论】: