2010-11-09 166 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);