2011-07-11 70 views
0

miamk的支持性的答案後,我更接近了一步實現我想要的東西。但現在有以下問題:具有多個視圖的iPad應用程序,如何讓一個視圖僅在橫向上可見?

我有一個可以在所有四個視圖模式(使用一個iPad應用程序的畫像上/向下和左/右)。但在某個時候我有一個觀點,我只想在風景模式中看到。所以,我中的UIViewController以下將觸發操作來查看的唯一景觀視野:

- (void) showProperty:(Property *) property { 
    if ([self interfaceOrientation] == UIInterfaceOrientationLandscapeLeft || [self interfaceOrientation] == UIInterfaceOrientationLandscapeRight) { 
     PropertyViewController *propertyView = [[PropertyViewController alloc] initWithNibName:@"PropertyViewController" bundle:[NSBundle mainBundle]]; 
     propertyView.property  = property; 
     [self.navigationController pushViewController:propertyView animated:YES]; 
     [propertyView release]; 
     propertyView = nil; 
    } 
    else { 
     RotateDeviceViewController *rotateView = [[RotateDeviceViewController alloc] initWithNibName:@"TabRotate" bundle: [NSBundle mainBundle]]; 
     rotateView.property = property; 
     [self.navigationController pushViewController:rotateView animated:YES]; 
     [rotateView release]; 
     rotateView = nil; 
    } 
} 

這工作得很好,因此顯示或者所需的屏幕(PropertyViewController)當iPad在橫向模式舉行,如果沒有,則顯示RotateDeviceViewController,它向用戶顯示一條消息,表明他/她應該旋轉設備以正確地查看屏幕。

這樣的作品!

那麼問題在這個RotateDeviceViewController出現。有我有以下幾點:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    if (UIInterfaceOrientationIsLandscape(interfaceOrientation)) 
     [self showProperty]; 
    return UIInterfaceOrientationIsPortrait(interfaceOrientation); 
} 

- (void) showProperty { 
    PropertyViewController *propertyView = [[PropertyViewController alloc] initWithNibName:@"PropertyViewController" bundle:[NSBundle mainBundle]]; 
    propertyView.property  = property; 
    [self.navigationController pushViewController:propertyView animated:YES]; 
    [propertyView release]; 
} 

所以只要我旋轉設備(查看RotateDeviceViewController時)爲橫向模式我展示用戶PropertyViewController。這工作...但是,當出現PropertyViewController它顯示我的佈局90度旋轉。所以基本上它顯示肖像的內容,而不是使用景觀模式(實際上是你持有設備的方式)的模式..

我希望這是有道理的,有人能告訴我是什麼導致了這。

+0

你是如何交換意見的?這可能是相關的:http://stackoverflow.com/questions/835989/iphone-landscape-mode-switching-to-portraite-mode-on-loading-new-controller – Simeon

回答

1

對於@ MacN00b的回答,一個更優雅的解決方法(至少在設計方面)是設置一個消息的肖像視圖,告訴用戶他應該旋轉設備,只有當他旋轉它時,爲景觀而建的景觀。

老實說,我認爲它醜陋的一切都已經旋轉,當用戶仍然在縱向方向。

+0

+1是的你是對的。這將是一個更好的解決方案。但是,我如何爲此設置兩個不同的視圖?一個以縱向顯示,另一個以橫向顯示。我如何實現這個? = /(猜猜我也會在Google上找到它) – Jules

+1

UIViewController有一個名爲'interfaceOrientation'的屬性,它是隻讀的。您可以編寫一個if條件來爲縱向加載一個視圖,爲橫向加載另一個視圖。 – MiguelB

+0

謝謝。這真的很有幫助,但現在我有另一個問題。我相應地更新了我的問題。希望你能幫我! – Jules

-1

試試這個:

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

希望這有助於。

+1

-1。 Jules明確指出,重寫此方法並不能提供他要求的解決方案。 – fzwo

+0

事實上,正如我所說的,這和我上面說過的我的代碼完全一樣。但這只是**阻止視圖從旋轉到肖像模式。但是,如果觀衆已經處於肖像模式,它不會旋轉視圖。 – Jules

1

您可以偵聽取向的變化使用:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:@"UIDeviceOrientationDidChangeNotification" object:nil]; 

然後通過加載相應的視圖迴應那些...

- (void) orientationChanged:(id)object 
{ 
    UIInterfaceOrientation interfaceOrientation = [[object object] orientation]; 

    if (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) 
    { 
     self.view = self.portraitView; 
    } 
    if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight) 
    { 
     self.view = self.landscapeView; 
    } 
} 

如果這將成爲一個奉獻UIView子類的有問題的屏幕可以讓portraitView包含一個標籤,通知用戶旋轉屏幕查看內容,然後使橫向視圖包含您的實際內容。

我目前在一個應用程序中執行此操作,兩個視圖都包含在一個筆尖中。只要確保您爲每個視圖適當地設置IB視圖屬性的方向...

相關問題