2015-01-11 60 views
1

這是一段時間,因爲我在摩托車事故後住院了3個月。 所以我剛剛更新我的蘋果程序訂閱:-)旋轉xcode中的子圖層

我還有另一個問題,我一直在腦海裏一段時間。 在我的iPad應用程序,我畫一個三角形在iPad上的這樣的中心:

- (void)initTriangle 
{ 
CGRect screenBound = [[UIScreen mainScreen] bounds]; 
CGSize screenSize = screenBound.size; 
CGFloat screenWidth = screenSize.width; 
CGFloat screenHeight = screenSize.height; 

// draw triangle (TRIANGLE) 
CGMutablePathRef path = CGPathCreateMutable(); 
CGPathMoveToPoint(path,NULL, 0.5*screenWidth, 0.5*screenHeight-25); 
CGPathAddLineToPoint(path, NULL, 0.5*screenWidth-25, 0.5*screenHeight+25); 
CGPathAddLineToPoint(path, NULL, 0.5*screenWidth+25, 0.5*screenHeight+25); 
CGPathAddLineToPoint(path, NULL, 0.5*screenWidth, 0.5*screenHeight-25); 

CAShapeLayer *triangle = [CAShapeLayer layer]; 
[triangle setPath:path]; 
[triangle setFillColor:[[UIColor blackColor] CGColor]]; 
[[[self view] layer] addSublayer:triangle]; 

CGPathRelease(path); 
} 

我呼籲這個從我viewDidLoad中是這樣的:

[self initTriangle]; 

現在,我想這個旋轉我的iPad圍繞Z軸旋轉,同時平放在桌面上。我有一個函數給我的浮動偏航讀數,我打電話給我的 - (無效)updateTriangleWithYaw :(浮動)偏航 方法,但我不知道該怎麼準確放在那裏使其旋轉。

這裏是我的方法看起來像至今:

-(void)updateTriangleWithYaw:(float)yaw 
{ 
CGRect screenBound = [[UIScreen mainScreen] bounds]; 
CGSize screenSize = screenBound.size; 
CGFloat screenWidth = screenSize.width; 
CGFloat screenHeight = screenSize.height; 

NSLog(@"YAW: %f", yaw); 
Z += 2 * yaw; 
Z *= 0.8; 

CGFloat newR = R + 10 * yaw; 

self.triangle.frame = CGRectMake(0.5*screenWidth, 0.5*screenHeight, newR, newR); 
} 

任何幫助將不勝感激!

謝謝你,並且是安全的傢伙!

回答

0

您應該設置圖層的affineTransform。可以應用旋轉變換等:

[self.triangle setAffineTransform:CGAffineTransformMakeRotation(yaw)]; 

這種方法,setAffineTransform是一個方便設置該層的transform屬性,這是變換CATransform3D的更一般的類型。您還可以設置圖層的transform直接,如果你想這樣做,你可以做一個關於像z軸旋轉:

self.triangle.transform = CATransform3DMakeRotation(yaw, 0, 0, 1); 

在這種情況下,第一個參數是角(弧度)最後三個參數指定旋轉軸。

請注意,您不應指定或取決於其變換不是標識(CGAffineTransformIdentity)的圖層的frame屬性的值。當您使用transform屬性時,您應該通過分配圖層的centerbounds屬性來設置圖層的大小和位置,同樣,如果要查找有關圖層位置和大小的信息,則應該閱讀centerbounds

+0

嘿亞倫,謝謝你的回覆!我不知道如何應用所提供的代碼片段。我將它複製到我的方法updateTriangleWithYaw中,但它似乎對我的三角形沒有任何影響: - /任何想法? – Studiologe

+0

根本沒有效果,是吧?你確定self.triangle被分配了嗎?我看到你在initTriangle中創建了一個三角形圖層,但我沒有看到你將它分配給self.triangle。 (同樣,我發現你的三角形是一個圖層,而不是一個視圖,所以我需要稍微修改我的答案,但它基本上是一樣的想法。) –

+0

拋出一個錯誤://分配給'CGAffineTransform'(又名'struct CGAffinrTransform')來自不兼容類型'CATransform3D'(又名'struct CAtransform3D') – Studiologe