本文由鋼鐵俠般的卿哥(微博)翻譯自蘋果官方文檔:Adopting Multitasking Enhancements on iPad,主要講述iOS 9中iPad的多任務處理功能,歡迎指正。
該文檔包含:
第一部分:iOS 9 分屏多任務--入門
第二部分:iOS 9 分屏多任務--Slide Over & Split View快速入門
第三部分:iOS 9 分屏多任務--畫中畫(PiP)快速入門
按照本章中的指導,在支持的iPad設備上讓你的App運行iOS 9多任務。
當你新建一個Xcode 7模板工程時,是默認支持Slide Over和Split View。如果你從老的工程升級到iOS 9,通過以下的步驟設置你的Xcode工程配置,從而讓App支持Slide Over和Split View:
按照 App Distribution Guide 中 Setting the Base SDK 的描述,將Base SDK設置為“Latest iOS”。
提供LaunchScreen.storyboard 文件(而不是在iOS 7以及更早版本中的.png圖片文件)。請參閱 App Distribution Guide 中的 Creating a Launch Screen File。
在項目的Info.plist文件中的“Supported interface orientations (iPad)”數組,聲明支持所有四個設備方向,如下所示
注意:如果你一定不支持Slide Over和Split View,在你的Xcode 項目的Info.plist文件中顯式地加入UIRequiresFullScreen關鍵字並為其Boolean值賦上YES。你可以在屬性列表編輯器,或在目標編輯器的General>Deployment Info區域設置。
提示:通過設置Settings > General > Multitasking,用戶可禁用Slide Over和Split View 。如果你已經把一切都設置正確後,但仍無法使用這些特性,你可以檢查這項設置。
對於如何使用Slide Over和Split View,可以下載Lister (for watchOS, iOS, and OS X)示例代碼工程。
在 Slide Over and Split View中,主要和次要App都同時運行在前台,大多數情況下它們都是平等的。但只有主要App可以:
擁有自己的狀態欄;
有資格使用第二物理屏幕工作;
可使用畫中畫自動調用;
可以占用橫屏下的2/3屏幕面積,並且在分屏視圖中,水平方向上是regular Size Class(橫屏Split View中,次要應用最多占用二分之一的屏幕,並且在水平方向上是compact Size Class)。
在Split View中,用戶控制你的應用程序窗口的大小。用戶通過旋轉設備(如在iOS的早期版本),或者水平滑動分割主要應用和次級應用程序的垂直分隔線來此操作。當兩種類型的變化發生時,系統以同樣的方式通知你的應用程序:窗口范圍界限的改變會伴隨改變根視圖控制器的Size Classes。(用戶移動分屏控件也會顯示App狀態過渡,在本節後面介紹。)
此前,iPad的水平和垂直Size Classes總是“regular”。隨著Slide Over 和 Split View出現,這些都已經有很大的改變。下圖顯示了你的App會遇到用戶操作iPad屏幕後不同的Size Classes。
為了App的內容正確顯示,你的App必須是自適應的。你的App設置應當:
按照 Auto Layout Guide、Size Classes Design Help 以及 Simulating Screen Size and Orientation 中描述的那樣使用Auto Layout和Size Classes。
這要求App中的LaunchScreen.storyboard文件必須支持Auto Layout。使用Xcode 7中的App模板創建的新工程會自動生成LaunchScreen.storyboard文件。學習如何添加這個文件到你的工程中,請參閱 App Distribution Guide 中的 Creating a Launch Screen File 內容。
實現 UITraitEnvironment?和 UIContentContainer 中的方法,響應?trait collection和尺寸大小的改變。
按照 App Programming Guide for iOS 中 Execution States for Apps 中所述,響應App狀態轉換協議方法調用。
正確地處理你的App的狀態轉換在iOS9中尤為重要。在Split View上下文中,每當用戶移動Split View分割器時,屏幕上的兩個應用程序都將移動到屏幕之外。甚至是當用戶改變主意並將分割器返回起點時,這種情況也會發生。
當用戶移動分割控件時,系統會使用 ApplicationWillResignActive: 協議方法調用App委托對象。
系統會重新調整你的App(屏幕外)以捕捉到一個或多個快照,確保當用戶最終釋放分隔控件時能提供流暢的用戶體驗。這是因為在用戶最終釋放分隔控件時無法預測應用的窗口最終邊界。更復雜的場景是設備的旋轉和移動分隔器同時進行。
保證你的App在大小改變、快照獲取處理中不丟失數據狀態或導航狀態。這就是當一個用戶改變App大小--移動分隔器並將其移動到初始位置最後釋放這個分隔器,這一系列的情況下,用戶期望App的狀態,導航位置(包括視圖、選擇、滾動位置以及其他等)能與用戶最初觸摸分隔器時一樣。充分使用 ApplicationWillResignActive: 調用保存用戶的狀態。詳情請閱讀 App Programming Guide for iOS 中 What to Do When Your App Is Interrupted Temporarily 一節。
如果用戶移動分隔控件直到屏幕邊界讓你的App消失,那系統會調用 ApplicationDidEnterBackground: 協議方法。
有關優雅其處理App狀態過渡的引導,請閱讀 App Programming Guide for iOS 中 Strategies for Handling App State Transitions 一節。
關於快照的處理信息,請閱讀 Prepare for the App Snapshot ,並參考 UIView Class Reference 中的 Capturing a View Snapshot 相關內容。