簡體   English   中英

在iOS中實現方向切換的正確方法是什么

[英]What is the proper way of implementing Orientation switching in iOS

我對在iOS應用中切換方向感到好奇。 我做過的每個教程都只是在討論如何自動旋轉視圖。 我更喜歡橫向和縱向的自定義視圖。 我知道如何制作橫向視圖控制器和縱向視圖控制器。 我的問題是,您是否需要單獨的視圖控制器來處理不同的方向? 如果是這樣,您是否將所有代碼從縱向視圖控制器復制並粘貼到橫向視圖控制器,然后連接新視圖控制器上的所有插座和操作? 如果是這種情況,那么定向代碼是否在單獨的類(也許是應用程序委托)中編寫,給出了有關訪問哪個視圖控制器的說明? 每次查看此內容時,我都會看到這樣編寫的代碼:

if (allowLandscape) {
return UIInterfaceOrientationIsLandscape(toInterfaceOrientation) || toInterfaceOrientation == UIInterfaceOrientationPortrait;
 }
 else {
 return toInterfaceOrientation == UIInterfaceOrientationPortrait;
 }

在上面的代碼中,toInterfaceOrientation方法是什么樣的?上面的代碼寫在哪里? 是在視圖中執行了縱向/橫向視圖控制器的加載方法還是在其他類中?

如果可以避免重復代碼,那始終是最佳選擇。 (干燥-不要重復自己http://en.wikipedia.org/wiki/Don't_repeat_yourself

我將嘗試盡可能多地使用可以處理兩種布局的視圖控制器。 如果縱向和橫向的視圖確實不同,則可能只需要兩個視圖控制器。

我不確定您發布的代碼。

您應該看一下: https : //developer.apple.com/videos/wwdc/2012/?id=236他們深入介紹了新的iOS 6旋轉內容。

可以為縱向和橫向視圖設置單獨的視圖控制器,但是在大多數情況下,這樣做並不是最好的解決方案。 查閱此Apple文檔以了解實現方法。

切換方向時,最好簡單地重新排列子視圖和視圖中的元素。 使用自動布局可以在元素上定義約束。 如果您的界面相當復雜,則可能必須在方向改變之前刪除一些約束並添加新聞約束。 如果您的界面非常復雜,並且要求界面元素在方向更改時完全改變其大小和位置,那么您很可能需要刪除所有約束,然后為新的方向視圖添加所有新約束。 無論哪種情況,在添加和刪除約束時,都可以在willRotatetoInterfaceOrientation視圖控制器方法中進行操作以獲得最佳視覺效果。

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {

    [self.view removeConstraints:self.view.constraints];

    if ((toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) || (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) ) {        
        // add landscape constraints here
    }
    else if ((toInterfaceOrientation == UIInterfaceOrientationPortrait) || (toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)) {
        // add portrait constraints here
    }
}

使用視覺格式語言以編程方式創建約束。 我在VFL上看到的一篇很好的文章是Command Shift上的Richard Turton撰寫的Visual Format Language

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM