2012-02-19 128 views
2

編輯問Autolayout是否有助於這種情況?固定位置旋轉UILabel

如何讓我的UILabel在屏幕上保持固定的位置,但仍然旋轉? shouldAutorotateToInterfaceOrientation返回YES並且標籤旋轉得很好,但無論我如何在Xcode中設置彈簧,標籤的位置都會改變。

第一張圖片顯示了我如何使用四個單獨的UILabels創建故事板中的佈局。 第二張圖片顯示風景如何出現 - 不是我想要的。 第三張圖片顯示了我希望如何看待風景,每個數字的旋轉動畫都以數字本身爲中心。

This is how I've created the layout in storyboard, with four individual UILabels. This is how landscape appears -- not what I want. Here is what I would like landscape to look, with the rotation animation of each number centered on the number itself.

+0

的它在做什麼帖子的圖片和你想要它做什麼。 – 2012-02-19 05:03:04

+0

很確定你將不得不手動(旋轉)。你不能使用struts/spring來獲得你想要的效果。 – gamozzii 2012-02-19 06:11:09

回答

3

vrk's在正確的軌道與他的答案,但shouldAutorotateToInterfaceOrientation:是不正確的方法來佈置你的標籤。當您收到shouldAutorotateToInterfaceOrientation:時,尚未更新新方向。

您應該在willAnimateRotationToInterfaceOrientation:duration:中佈置您的觀點。作爲the documentation狀態:

通過這種方法被調用時,interfaceOrientation屬性已被設置爲新的方向,視圖的界限已被更改。因此,您可以在此方法中執行視圖所需的任何其他佈局。

你甚至可以動畫您的意見,在此方法中的新位置。

1

需要在shouldAutorotateToInterfaceOrientation方法

2

,你可以執行上的標籤(transformatin)旋轉手動設置標籤的框架位置值。在uiviewcontroller中通過interfaceorientation方法做到這一點。

uilabel.transform = CGAffineTransformMakeRotation(M_PI/-4);喜歡這個。在全部四個方向上執行此操作。有一件事情是從appdelegate的狀態欄方向而不是設備方向。它將幫助您保持與視圖方向同步。

1

創建兩個UILabels,一個水平和其他垂直。改變方向時,隱藏並顯示所需的標籤。 要做到這一點,你必須把在viewDidLoad中:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:@"UIDeviceOrientationDidChangeNotification" object:nil]; 

和實施

- (void) didRotate:(NSNotification *)notification{ 

     UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; 

     if (orientation == UIDeviceOrientationLandscapeLeft) 
     { 

      // show Horizontal Label 
     } 
     .... 
}