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