2010-11-09 106 views
1

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

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

但是它显示了访问属性的未知“achorPoint”组件。 任何人都可以给我一些解决方案

+1

你已经完成了'#import '吗? – Anna 2010-11-09 02:40:04

回答

0

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

3

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

记住你可以用

CGAffineTransform CGAffineTransformConcat (CGAffineTransform t1, CGAffineTransform t2); 

至环比上涨变换。这基本上意味着你正在乘以变换矩阵。

所以,既然你知道了,标准的旋转就在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> 
0

您可能无法通过只导入

#import <QuartzCore/QuartzCore.h> 

即访问属性anchorPoint对你的看法;

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

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

#import <QuartzCore/CALayer.h> 

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

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