UIimageView围绕一个点旋转

时间:2010-11-09 00:12:43

标签: uiimageview transform rotation iphone

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

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

然而,它显示了访问属性的未知'achorPoint'组件。 任何人都可以给我一些解决方案

4 个答案:

答案 0 :(得分:3)

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

请记住,您可以使用

CGAffineTransform CGAffineTransformConcat ( CGAffineTransform t1, CGAffineTransform t2 );

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

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

  1. 进入旋转点
  2. 旋转
  3. 后退
  4. 并将它们联系起来。

    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 ...”,则需要使用连接。我只是把功能放在一起。

答案 1 :(得分:2)

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

#import <QuartzCore/QuartzCore.h>

答案 2 :(得分:0)

它给你的错误暗示你正在尝试设置一个不存在的属性。你错过了'anchorPoint'吗?如果情况并非如此,并且您的问题仅有拼写错误,请仔细检查您的类型。你的'Compass2'应该是某种类型的UIView,它的'layer'应该是CALayer对象。

答案 3 :(得分:0)

您可能无法通过导入

来访问视图的属性anchorPoint
#import <QuartzCore/QuartzCore.h>

即;

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

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

#import <QuartzCore/CALayer.h> 

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

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