2011-09-06 98 views
2

我正在Xcode 4中構建iPad應用程序。該應用程序始終顯示在橫向視圖中。爲實現此目的,我嘗試了以下操作:iPad停止屏幕旋轉Xcode 4

  • 在「目標摘要」屏幕中,我僅選擇了Landscape Left作爲受支持的設備Orentation。
  • 在目標信息屏/ Info.plist中設置支持的接口方向(新iPad)爲橫向(左home鍵)

這導致了應用程序的要在橫向模式下啓動,但如果我旋轉設備它仍然改變其方向。此外,當我有一個UIViewController呈現與presentationStyle UIPresentationFormSheet它旋轉到肖像它顯示的時刻。

在一些其他線程/論壇,它被勸創造的UIViewController類別和重寫

-(UIDeviceOrientation)interfaceOrientation; 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation; 

,除非你旋轉總是旋轉設備的方向(LandscapeLeft)或明確LandscapeLeft,也沒有自動旋轉LandscapeLeft。

當我像這樣設置這些函數(或者,例如,根本不允許旋轉),應用程序總是以縱向模式顯示,並且不會旋轉,甚至不會傳送到LandscapeLeft。在橫向模式下啓動應用程序的唯一方法是當我允許旋轉時,無論interfaceOrientaton是什麼。

有人知道我能如何解決這個問題嗎?

我實現的類別:

@implementation UIViewController(Extends) 

-(UIDeviceOrientation)interfaceOrientation 
{ 

    return [[UIDevice currentDevice] orientation]; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 

    if(interfaceOrientation == UIInterfaceOrientationLandscapeLeft) 
     return YES; 
    else 
     return NO; 
} 

@end 

,我可以找到被定義縱向放置的地方是在MainWindow.xib中原來的窗口,但是這不能改變,並且每個線程/論壇說特定的設置是/不應該成爲問題。

回答

1

據我可以告訴你採取的步驟應該防止接口旋轉。

您可以隨時嘗試覆蓋在您的應用的每個視圖控制器中執行方向的調用。這至少應該讓你知道旋轉發生的位置。之後,斷點可能會告訴你更多。

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration { 
    NSLog(@"will rotate to orientation %d in %@", interfaceOrientation, NSStringFromClass([self class]) 
} 

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { 
    NSLog(@"did rotate from orientation %d to %d in %@", fromInterfaceOrientation, [self interfaceOrientation], NSStringFromClass([self class]) 
} 
+0

的問題,如果你不讓它旋轉是應用aparantly總是開始於人像,如果你定義它應該是在景觀,它做的第一件事就是切換到橫向,所以如果你禁止它改變它永遠不會出現在風景中。 我改變了它,讓shouldAutorotateToInterfaceOrientation在兩種風景模式下都返回YES,這似乎解決了這個問題。它仍然只允許一個橫向(主頁按鈕左),因爲它是在Info.plist中設置的。 您的回答確實幫助我弄清楚了應用程序的內部工作原理。 – ophychius