iOS 9 分屏多工(1):入門

發表於2015-07-17

該文件包含:
第一部分:iOS 9 分屏多工–入門
第二部分:iOS 9 分屏多工–Slide Over & Split View快速入門
第三部分:iOS 9 分屏多工–畫中畫(PiP)快速入門

重要

這是API或開發技術的初步文件。蘋果公司提供這些資訊主要是為了幫助你通過蘋果產品使用這些技術或者程式設計介面而做好計劃,該資訊有可能會在未來發生改變,本文當中提到的軟體應該以最終釋出的作業系統測試和最終文件為準。未來有可能會提供新版本的文件資訊。

iOS 9 中多工處理功能,為我們提供了更多的方式來暢享iPad和App帶來的樂趣。

  • Slide Over:使用者可通過該功能調出螢幕右側的懸浮檢視(在從右到左的語言環境下位於螢幕的左側),從而檢視次要應用程式並與其進行互動。
  • Split View(分屏檢視):呈現兩個並行的應用,使用者可以檢視、調整其大小,並與其進行互動。
  • 畫中畫(Picture in Picture)功能:讓使用者在多個應用中可以懸浮播放視訊,並可移動視訊視窗以及調整視窗大小。

在Slide Over功能中,全屏顯示的App 是主App。在Slide Over上選中的App 是次要App。在分屏檢視Split View(在從左至右寫的語言環境下)左側的App是主要App,右側的 是次要App。

如果你遵循了蘋果iOS 8最佳實踐建議,所有這些新的與App的互動方式,尤其是iOS 9中的多工處理都是非常的簡單和直觀。從Xcode 7開始,每一個iOS App 模板都預設支援Slide Over 和 Split View。

從開發者的角度來說,最大的挑戰是資源的管理。

每個iOS App(甚至那些沒有使用多工功能的App)需要在iOS9中良好地執行。現在,甚至全屏App 們都沒有有效地利用整個螢幕、CPU、記憶體以及其他的資源。例如,使用者可以:

  • 在螢幕上新增畫中畫視窗,不管螢幕上展示了什麼內容(包括一個全屏App),這個包含視訊的App會持續地在後臺執行。來自其他App的PiP會增加App的記憶體壓力,同時會降低App的顯示幀率。
  • 滑動Slide Over 來使用次要App。當它是可視狀態時,次要App在前臺 執行,會再次增加App的記憶體壓力,減少App的顯示幀率。
  • 通過Slide Over 從次要App中調出鍵盤會遮蓋主要App的一部分。每個iOS9 開發者,甚至開發全屏顯示App卻從未使用過keyboard 的開發者,可能希望能像UIWindow Class Reference中描述的那樣響應鍵盤出現的通知。

為了能有效地參與到這種環境中,iOS9開發者必須謹慎調整他們的App 的資源消耗。如果一個App 每一幀消耗了太多的時間,螢幕的重新整理率會低於60幀每秒。在記憶體壓力下,系統會終止消耗最多記憶體的App。

想了解更多如何在iOS 9中如何管理資源,請檢視Multitasking Mindset

瞭解App的特徵並審視自己的工作

考慮你的App的特徵後再決定你想採用哪種多工增強功能,以及需要做什麼工作。

大多數App應該採用Slide Over 和 Split View。從使用者的角度來說,一個iOS 9應用不支援這兩項特性是有點格格不入的。

如果你的App符合以下情況之一,可以不支援多工處理功能:

  • 以相機為中心的App,使用整個螢幕預覽和以快速捕捉瞬間為主要功能。
  • 使用全裝置螢幕的App,比如遊戲使用iPad的感測器作為遊戲核心操控的一部分。

除此之外,蘋果和你的使用者們都希望你採用Slide Over 和 Split View。欲瞭解更多,請參看Slide Over & Split View Quick Start

如果不使用Slide Over 和 Split View,需將UIRequiresFullScreen key新增到Xcode 工程的Info.plist檔案中,並且設定其Boolean value為YES。

注意:不使用Slide Over 和 Split View,表示你的App 不能出現在Slide Over 區域中,儘管你的App 執行在多工環境中。在你想支援的硬體上測試App,以確保當其他App出現在Slide Over模式中,以及在播放來自第三個App的視訊的畫中畫模式下,你的App都能流暢執行。

畫中畫(PiP)適用於以播放視訊為主要功能的App。畫中畫(PiP)也最佳適合中長時間的內容播放。

支援畫中畫,能讓你的使用者在視屏播放的同時,還能與你App或其他的App互動。學習和運用PiP,請閱讀Picture in Picture Quick Start。

在遊戲場景的過渡、首次啟動以及類似的內容不應該支援畫中畫(PiP)。你可以選擇給定的視訊退出畫中畫,如下所示:?

注意:如果你的App使用Media Player 框架播放視訊,無論使用其框架中的MPMoviePlayerControllerMPMoviePlayerViewController類,你必須遷移使用AVKit或AV Foundation。Media Player視訊播放正式在iOS 9中棄用。

如果你的App 播放HTTP Live Streaming (HLS)視訊,請使用後設資料優化播放。通過響應stream-variant後設資料標籤,優化應用程式在各種視屏視窗大小下的效能。並最大限度地減少電池消耗,你使用的內容分發網路(CDNs)同樣也應該提供多個stream variants,並用合適的解析度標籤標註每個variant。欲瞭解更多資訊,請參閱 HTTP Live Streaming Overview

如果你的應用程式在第二個物理螢幕上展示內容,請測試應用的轉場。

特別需要測試從次要App過渡到主要App的用例。只有主要App才有資格使用第二個物理螢幕,所以過渡到主要App是一個新的場景,你的App可以從中接收UIScreenDidConnectNotification 通知。確保你的App可幫使用者理解使用例項中發生了什麼,當內容移動到第二屏上時,這可能有點奇怪。

開發環境

Xcode7 支援在iPad上使用多工增強。

使用Xcode 7、模擬器和Instruments 中的新功能:

  • 在每個iOS App模板中預先配置支援Slide Over 和 Split View。例如,包括LaunchScreen.storyboard檔案和預先設定的Info.plist檔案。詳見:Xcode 概述
  • Interface Builder中的Storyboards可以很容易實現自動佈局約束。詳見 Auto Layout Guide 和 Auto Layout Help
  • Interface Builder 預覽助手讓你能立即看到在Slide Over 和Split View場景中,你的佈局如何適配不同的Size Class。請參閱 Size Classes Design Help 和 ?Previewing Your Layout for Different Localizations, iOS Devices, and iOS Versions
  • Xcode 7中的模擬器可讓你使用在真實裝置中相同的手勢調出Slide Over 和 Split View。你可以使用模擬器測試所有Slide Over和Split View 佈局表現,也可測試畫中畫。然而,模擬器不能模擬真實iOS裝置的記憶體、CPU、GPU、磁碟I/O,或iOS裝置的其他資源特性。有關模擬器的使用指南,請參閱 Simulator User Guide
  • Instrument中的記憶體分配、Time Profiler、記憶體洩露分析模板(Leaks profiling templates),能讓你監測App的行為和資源使用情況。詳見:Instruments User Guide?和 Instruments Help.
  • Xcode7 提供了視覺化介面,用於全面支援資源目錄(asset catalog)。為你的視覺化資源使用資源目錄,如圖片和App圖示。這對於優化App的記憶體十分重要。參見Asset Catalog Help。你也可以以程式設計的方式使用資源目錄,請參閱 UIImageAsset Class Reference?。

想要測試記憶體、CPU、GPU以及所有硬體相關的表現,請在你想要支援的硬體上測試App。想要在iOS裝置上測試你的App,你必須是iOS開發者計劃的成員。請參閱 App Distribution Guide 中的 Managing Accounts 。

在iOS9中,以下型號的iPad支援多工增強。

多工思維模式

想要在支援iOS 9的iPad上的取得成功,不管是對系統,還是裝置上的其他App,你的App必須在裝置資源方面表現良好。

當你的App在前臺執行時,其他的App可能會在它一旁執行,也可能播放畫中畫視訊,並且持有它的App在後臺執行。

在iOS9之前,你可以使用任何可用的CPU、GPU、記憶體、I/O以及硬體資源維持極好的體驗。在iOS 9中,這些都將改變。App如何有效地利用資源成為了問題關鍵,如此,使用者的iPad體驗才是流暢和響應靈敏的。

為了獲得最佳的使用者體驗,系統會緊密地管理資源消耗情況,並終止使用超過系統配額資源的App。

你在iPad上採用多工處理增強的大部分工作,很有可能是對資源管理的最佳實踐。第一步:

  • 使用Instrument測試你的App確保其沒有記憶體洩露,不會無限記憶體增長或阻塞主執行緒。
  • 使用應用狀態轉變的協議方法,當你的App移到後臺時,丟棄不必要的檢視控制器、檢視、資源和資料快取。
  • 在每個所支援的裝置上測試你的App,並同時使用資源密集型App,例如地圖App,將其設定衛星檢視和執行立交橋影像動畫。以你的App分別作為主要App和次要App進行測試,確保兩種情況下你的App和地圖App都能快速響應。

在iOS 9中,不再適合從螢幕的介面方向來考慮。App能在iPad上適應水平方向上的compact Size Class或是regular Size Class,大小改變獨立於介面的方向。相反要使用trait collections和Size Classes,採用UIContentContainer和UITraitEnvironment協議,請參閱Slide Over and Split View Quick Start所述。

同樣在iOS 9中也不再適合使用螢幕的範圍限制來判斷你的App的可見區域,而是使用你App的視窗的範圍來判斷。注意你的App的範圍應該是可操控。你不能設定App的範圍界限,也不能阻止其改變。

儘管Auto Layout 自動佈局不是最佳iOS 9 App所必須,但這樣做會更容易。自動佈局提供了效能的優勢,並幫助你匹配蘋果在 iOS Human Interface Guidelines 中描述的最佳實踐。簡單地說,Auto Layout幫助你的內容顯示在正確的地方,並有助於未來你的App的迭代。你可以反覆使用Auto Layout,一次一個佈局。至少你的LaunchScreen.storyboard檔案必須使用Auto Layout。縱觀你的App,使用Storyboards幫助你的檢視適應使用者在不同情況下開啟和使用你的App時檢視尺寸的變化。

相關文章