Xamarin.iOS 中的 iPad 多任務處理
iOS 9 支援使用投影片或分割檢視同時執行的兩個應用程式。 它也支援播放圖片中的視訊。
iOS 9 新增在特定 iPad 硬體上同時執行兩個應用程式的多任務支援。 透過下列功能支援 iPad 的多工作處理:
- 投影片上方 - 允許使用者暫時在投影片面板上執行第二個 iOS 應用程式(根據語言方向在畫面的右側或左側),涵蓋目前執行中主要應用程式的大約 25%。 投影片上方僅適用於 iPad Pro、iPad Air、iPad Air 2、iPad Mini 2、iPad Mini 3 或 iPad Mini 4。
- 分割檢視 - 在支援的 iPad 硬體上(僅限 iPad Air 2、iPad Mini 4 和 iPad Pro),使用者可以挑選第二個應用程式,並排執行它與目前在分割畫面模式中執行的應用程式。 用戶可以控制每個應用程式所佔用主畫面的百分比。
- 圖片 圖片 - 對於播放視訊內容的應用程式,影片現在可以在可移動且可重設大小的視窗中播放,而該視窗會浮動於目前在 iOS 裝置上執行的其他應用程式上。 用戶可完全控制此視窗的大小和位置。 圖片中的圖片僅適用於 iPad Pro、iPad Air、iPad Air 2、iPad Mini 2、iPad Mini 3 或 iPad Mini 4。
在應用程式中支援多任務處理時,需要考慮許多事項,包括:
身為應用程式開發人員,您也可以 退出宣告多任務,包括 停用 PIP 視訊播放。
本文將涵蓋確保 Xamarin.iOS 應用程式在多任務處理環境中正確執行或如何退出多任務處理,如果不適合您的應用程式,則本文將涵蓋所需的步驟。
iPad 視訊的多任務處理
多任務快速入門
若要支援 投影片 或 分割檢視 ,您的應用程式必須執行下列動作:
- 針對 iOS 9 建置(或更新)。
- 使用分鏡腳本作為其啟動畫面(而非影像資產)。
- 針對其UI使用分鏡腳本搭配 Autolayout 和 Size 類別。
- 支援所有 4 個 iOS 裝置方向(直向、倒置直向、橫向向左和橫向向右)。
關於 iPad 的多任務處理
iOS 9 在 iPad 上推出投影片、分割視圖(僅限 iPad Air 2、iPad Mini 4 和 iPad Pro)和圖片中的圖片,在 iPad 上提供新的多任務功能。 我們將在下列各節中進一步了解這些功能。
投影片上方
投影片功能可讓用戶挑選第二個應用程式,並將其顯示在小型滑動面板中,以提供快速互動。 [滑過] 面板是暫時的,當使用者返回使用主要應用程式時,將會關閉。
要記住的主要內容是,用戶決定哪些兩個應用程式會並存執行,而開發人員無法控制此程式。 因此,您必須執行一些動作,以確保 Xamarin.iOS 應用程式在 [投影片上移] 面板中正確執行:
- 使用自動版面配置和大小類別 — 因為您的 Xamarin.iOS 應用程式現在可以在滑動側邊面板中執行,因此您無法再依賴裝置、其螢幕大小或方向來配置 UI。 若要確保您的 app 能夠正確調整其介面,您必須使用 Autolayout 和 Size 類別。 如需詳細資訊,請參閱整合 分鏡腳本 簡介檔。
- 有效率地 使用資源 — 因為您的應用程式現在可以與另一個執行中的應用程式共享系統,因此您的應用程式必須有效率地使用系統資源。 當記憶體變得稀疏時,系統會自動終止耗用最多記憶體的應用程式。 如需詳細資訊,請參閱Apple 適用於iOS應用程式的 能源效率指南。
投影片上方僅適用於 iPad Pro、iPad Air、iPad Air 2、iPad Mini 2、iPad Mini 3 或 iPad Mini 4。 若要深入瞭解如何準備App以進行投影片,請參閱Apple在 iPad 上採用多重任務增強功能檔。
分割檢視
在支援的 iPad 硬體上(僅限 iPad Air 2、iPad Mini 4 和 iPad Pro),使用者可以挑選第二個應用程式,並排執行它,並排執行目前在分割畫面模式中執行的應用程式。 用戶可以藉由拖曳螢幕分隔器來控制每個應用程式佔用的主畫面百分比。
和投影片一樣,用戶決定哪兩個應用程式會並排執行,開發人員無法控制此程式。 因此,分割檢視會在 Xamarin.iOS 應用程式上放置類似的需求:
- 使用 Autolayout 和 Size 類別 — 因為您的 Xamarin.iOS 應用程式現在可以在使用者的指定大小以分割畫面模式執行,因此您無法再依賴裝置、其螢幕大小或方向來配置 UI。 若要確保您的 app 能夠正確調整其介面,您必須使用 Autolayout 和 Size 類別。 如需詳細資訊,請參閱整合 分鏡腳本 簡介檔。
- 有效率地 使用資源 — 因為您的應用程式現在可以與另一個執行中的應用程式共享系統,因此您的應用程式必須有效率地使用系統資源。 當記憶體變得稀疏時,系統會自動終止耗用最多記憶體的應用程式。 如需詳細資訊,請參閱Apple 適用於iOS應用程式的 能源效率指南。
若要深入瞭解如何準備您的應用程式進行分割檢視,請參閱 Apple 在 iPad 上採用多任務增強功能檔。
圖片中的圖片
新的圖片圖片功能 (也稱為 PIP) 可讓使用者在小型浮動視窗中觀看影片,讓用戶可以在螢幕上的任何位置位於其他執行中的應用程式上方。
如同投影片和分割檢視,使用者完全控制在圖片模式中觀看影片。 如果您的應用程式的主要函式是觀看影片,則需要一些修改,才能在 PIP 模式中正確運作。 否則,不需要變更以支援 PIP。
若要讓應用程式在使用者的要求下顯示 PIP 視訊,您必須使用 AVKit 或 AV Foundation API。 媒體播放器 架構已在iOS 9中過時,且不支援 PIP。
圖片中的圖片僅適用於 iPad Pro、iPad Air、iPad Air 2、iPad Mini 2、iPad Mini 3 或 iPad Mini 4。 如需詳細資訊,請參閱Apple 的圖片圖片快速入門 檔。
在您的應用程式中支援多任務處理
對於任何現有的 Xamarin.iOS 應用程式,只要您的應用程式已經遵循 Apple 的設計指南和 iOS 8 的最佳做法,支援多任務就是一項透明工作。 這表示應用程式應該使用分鏡腳本搭配 Autolayout 和 Size 類別進行其使用者介面配置(如需詳細資訊,請參閱整合 分鏡腳本 簡介)。
對於這些應用程式,支援多任務且在其內運作良好時,幾乎不需要變更或不需要變更。 如果您的 app UI,是使用其他方法建立的,例如直接定位和調整 C# 程式代碼中的 UI 元素大小,或依賴特定裝置螢幕大小或方向,則需要進行重大修改,才能正確支援 iOS 9 多任務處理。
若要在任何新的 Xamarin.iOS 應用程式上支援 iOS 9 多任務處理,請針對所有應用程式的使用者介面配置,再次使用分鏡腳本搭配 Autolayout 和 Size 類別,並實作下列各節中的指示。
螢幕大小和方向考慮
在 iOS 9 之前,您可以針對特定裝置螢幕大小和方向設計應用程式。 因為應用程式現在可以在 [投影片] 面板或 [分割檢視] 模式中執行,所以無論裝置的實際方向或螢幕大小為何,它都可以在 iPad 上的精簡或一般水準大小類別中執行。
在 iPad 上,全螢幕應用程式具有一般水準和垂直大小類別。 所有 iPhone,但 iPhone 6 Plus 和 iPhone 6s Plus,都以任何方向雙向具有 Compact Size 類別。 iPhone 6 Plus 和 iPhone 6s Plus 在橫向模式中具有一般水準大小類別和精簡垂直大小類別(很像 iPad Mini)。
在支援投影片和分割檢視的 iPad 上,您最終可以使用下列組合:
方向 | 主要應用程式 | 次要應用程式 |
---|---|---|
直向 | 75% 的螢幕 精簡水準 一般垂直 |
25% 的螢幕 精簡水準 一般垂直 |
橫向 | 75% 的螢幕 一般水準 一般垂直 |
25% 的螢幕 精簡水準 一般垂直 |
橫向 | 50% 的螢幕 精簡水準 一般垂直 |
50% 的螢幕 精簡水準 一般垂直 |
在範例應用程式中,如果在橫向模式的 iPad 上執行全螢幕,則會同時顯示清單和詳細資料檢視:
如果在 [投影片上方] 面板中執行相同的應用程式,則會配置為 [精簡水準大小類別],並只顯示清單:
為了確保您的應用程式在這些情況下運作正確,您應該採用特性集合以及大小類別,並符合 IUIContentContainer
和 IUITraitEnvironment
介面。 如需詳細資訊,請參閱Apple的 UITraitCollection 類別參考 和整合 分鏡腳本 簡介指南。
此外,您無法再依賴裝置畫面界限來定義應用程式的可見區域,您必須改用應用程式的視窗界限。 由於視窗界限完全由使用者控制,因此您無法以程式設計方式調整它們,或防止使用者變更這些界限。
最後,您的應用程式必須使用分鏡腳本檔案來呈現其啟動畫面,而不是使用一組 .png 圖像檔,並支援這四個介面方向(直向、倒置直向、橫向向左和橫向右方),以考慮在 [投影片上方] 面板或 [分割檢視] 模式中執行。
自定義硬體鍵盤快捷方式
在 iPad 上執行的 iOS 9 中,Apple 已擴充硬體鍵盤的支援。 iPad 一律包含透過藍牙的基本外部鍵盤支援,一些鍵盤製造商建立了包含硬式有線 iOS 特定按鍵的鍵盤。
現在,使用 iOS 9,應用程式可以建立自己的自訂鍵盤快捷方式。 此外,有一些基本的鍵盤快捷方式,例如 Command-C(copy)、Command-X(cut)、Command-V(paste)和 Command-Shift-H(home),不需要特別撰寫應用程式來響應它們。
Command-Tab 會啟動應用程式切換器,可讓使用者從鍵盤快速切換應用程式,就像 Mac OS 一樣:
如果 iOS 9 應用程式包含鍵盤快捷方式,使用者可以按住 [命令]、 [選項 ] 或 [控件 ] 鍵,以在彈出視窗中顯示它們:
定義自訂鍵盤快捷方式
如果我們將下列程式代碼新增至應用程式中的檢視或檢視控制器,當該檢視或控制器可見時,將可使用自定義鍵盤快捷方式:
#region Custom Keyboard Shortcut
public override bool CanBecomeFirstResponder {
get { return true; }
}
public override UIKeyCommand[] KeyCommands {
get {
var keyCommand = UIKeyCommand.Create (new NSString("n"), UIKeyModifierFlags.Command, new Selector ("NewEntry"), new NSString("New Entry"));
return new UIKeyCommand[]{ keyCommand };
}
}
[Export("NewEntry")]
public void NewEntry() {
// Add a new entry
...
}
#endregion
首先,我們會覆寫 CanBecomeFirstResponder
屬性並傳回 true
,讓檢視或檢視控制器可以接收鍵盤輸入。
接下來,我們會覆寫 屬性,KeyCommands
併為 Command-N 按鍵建立新的 UIKeyCommand
。 啟用擊鍵時,我們會呼叫 NewEntry
方法(我們使用 命令向iOS 9 Export
公開),以執行要求的動作。
如果我們在附加硬體鍵盤且使用者輸入 Command-N 的 iPad 上執行此應用程式,則會將新的專案新增至清單。 如果使用者按住 Command 鍵,則會顯示快捷方式清單:
資源管理考慮
即使是已經使用 iOS 8 設計指南和最佳做法的應用程式,有效率的資源管理也可能是個問題。 在 iOS 9 中,應用程式不再獨佔使用記憶體、CPU 或其他系統資源。
因此,您必須微調 Xamarin.iOS 應用程式,以有效地使用系統資源,或在記憶體不足的情況下面臨終止。 這同樣適用於退出宣告多任務的應用程式,因為第二個應用程式可能仍會在 [投影片上方] 面板或需要額外資源的 [圖片中的圖片] 視窗中執行,或導致重新整理速率降至每秒 60 個畫面格以下。
請考慮下列使用者動作及其影響:
- 在 [投影片上方] 面板中 輸入文字 - 即使您的應用程式沒有文字輸入,系統鍵盤現在仍可透過其UI顯示。 因此,應用程式可能需要回應鍵盤顯示通知(例如顯示和隱藏鍵盤)。
- 在 [投影片上方] 面板中 執行第二個應用程式 - 新的應用程式現在正在前景執行,並與現有的應用程式競爭系統資源,例如記憶體和 CPU 週期。
- 在 PIP 視窗中 播放視訊 - 此視窗不僅涵蓋您 app 介面的一部分,而且啟動影片的應用程式仍在背景中執行,並耗用 CPU 和記憶體資源。
為了確保您的應用程式有效率地使用資源,您應該執行下列動作:
- 使用 Instruments 分析應用程式 - 檢查記憶體流失、過度 CPU 使用量,以及應用程式可能封鎖主線程的區域。
- 回應狀態轉換方法 - 在您的 AppDelegate.cs 檔案覆寫和狀態變更方法的回應,例如從背景輸入或傳回的應用程式。 釋放任何未取得的資產,例如影像、數據或檢視和檢視控制器。
- 使用大量記憶體應用程式 並排測試 - 在實體 iOS 硬體上使用 [投影片和分割檢視] 搭配記憶體密集應用程式執行您的應用程式,例如地圖(在衛星檢視模式中),並測試這兩個應用程式是否保持回應且不會當機。
如需資源管理的詳細資訊,請參閱 iOS 應用程式的 Apple 能源效率指南。
退出宣告多任務處理
雖然 Apple 建議所有 iOS 9 應用程式都支援多任務處理,但應用程式可能也有非常特定的原因,例如需要全螢幕正常運作的遊戲或相機應用程式。
若要讓 Xamarin.iOS 應用程式退出宣告在 [投影片] 面板或 [分割檢視] 模式中執行,請編輯專案的 Info.plist 檔案,並核取 [需要全螢幕]:
重要
雖然退出宣告多任務處理可防止您的應用程式在 [滑出] 或 [分割檢視] 中執行,但不會防止另一個應用程式在 [投影片] 中執行,或 [圖片中的圖片] 視訊無法與您的應用程式一起顯示。
停用 PIP 視訊播放
在大部分情況下,您的應用程式應該允許使用者播放它在圖片浮動視窗中顯示的任何視訊內容。 不過,在某些情況下可能不想要這種情況,例如遊戲剪下場景影片。
若要退出宣告 PIP 視訊播放,請在您的應用程式中執行下列動作:
- 如果您使用
AVPlayerViewController
顯示視訊,請將AllowsPictureInPicturePlayback
屬性設定為false
。 - 如果您使用
AVPlayerLayer
顯示視訊,請勿具現化AVPictureInPictureController
。 - 如果您使用
WKWebView
顯示視訊,請將AllowsPictureInPictureMediaPlayback
屬性設定為false
。
摘要
本文涵蓋確保 Xamarin.iOS 應用程式將在 iOS 9 的新多任務功能中正確執行及運作所需的步驟。 此外,它涵蓋針對不適合的應用程式退出宣告多任務。