2010-12-01 56 views
0

我有一個UIView根和一個UIView A作爲其子視圖iphone - 子視圖旋轉問題

我不允許root旋轉,所以我的根類

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
return NO;} 

寫,但我允許根的子視圖(A)旋轉,所以在上課,我寫

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
return YES;} 

但似乎根和其子視圖不可旋轉。

我該如何讓A旋轉但不是根?

感謝

回答

3

意見不回答shouldAutorotateToInterfaceOrientation,視圖控制器做。如果你的視圖控制器說它會旋轉,那麼它的視圖和所有的子視圖將會旋轉。如果你的視圖控制器說它不會旋轉,那麼它的視圖將不會旋轉,它的子項也不會旋轉。

有兩種可能的方法來解決你的問題,這依賴於你想要做什麼:

  • 如果非旋轉的觀點是旋轉一切的背後,你可以從視圖控制器刪除它,將viewWillAppear添加到視圖控制器後面的主應用程序窗口中:並在viewDidDisappear上再次移除它:
  • 如果非旋轉和旋轉視圖需要以更復雜的方式混合,您可以捕獲willAnimateRotationToInterfaceOrientation:duration:和在非旋轉視圖上設置合適的逆變換。所以它旋轉,然後不旋轉。由於CoreAnimation的工作方式,您需要在特定的180度旋轉之間獲得正確的行爲有點棘手。

UIApplication提供了一種將關鍵窗口作爲UIWindow對象獲取的方法,這可能是您想要的第一個想法。 UIWindow繼承自UIView,因此所有用於添加和排列子視圖的標準機制都適用。

對於後者,您需要在相關視圖上設置變換。從超視圖中獲取變換,獲取反轉並將其設置在視圖上。有關更多詳細信息,請參見CGAffineTransform。 CoreAnimation問題提到,從一個旋轉到180度不同的最短路徑(如CoreAnimation將採用)的過渡給出了兩個潛在的解決方案 - 一個順時針和一個逆時針。在實踐中,如果在縱向和縱向之間旋轉,您需要在縱向模式下爲視圖的變換添加不可見的偏差,以確保CoreAnimation選擇正確的偏移。如果你使用的是iPhone,那麼在該設備上不支持UIInterfaceOrientationPortraitUpsideDown是完全可以接受的(大多數蘋果應用程序都不會),所以實際上可能只是不支持這種定位。

+0

對不起,我說的不清楚。是的,它在ViewController中。但是,您的意思是,如果父視圖設置爲非旋轉,將其子視圖設置爲可以旋轉並不容易? – Jack 2010-12-01 15:17:04