次の方法で共有


Xamarin.iOS での iPad のマルチタスキング

iOS 9 では、スライド オーバーまたは分割ビューを使用して、2 つのアプリの同時実行がサポートされています。 また、ピクチャ イン ピクチャのビデオ再生もサポートしています。

分割画面の例ピクチャ イン ピクチャの例

iOS 9 では、特定の iPad ハードウェア上で 2 つのアプリを同時に実行するためのマルチタスク サポートが追加されました。 iPad のマルチタスクは、次の機能によってサポートされています。

  • スライド オーバー - ユーザーは、現在実行中のメイン アプリの約 25% を占めるスライド アウト パネル (言語の方向に基づいてパネルの右側または左側) で 2 つ目の iOS アプリを一時的に実行できます。 スライド オーバーは、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 のみ) では、ユーザーは 2 つ目のアプリを選び、分割画面モードで現在実行中のアプリと並べて実行できます。 ユーザーは、各アプリがメイン画面に占める割合を制御できます。
  • ピクチャ イン ピクチャ - 動画コンテンツを再生するアプリの場合、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 クラスを含むストーリーボードを使用します。
  • iOS デバイスの 4 つの向き (縦向き、逆さまの縦向き、左横向き、右横向き) をすべてサポートします。

iPad のマルチタスキングについて

iOS 9 は、スライド オーバー、分割ビュー (iPad Air 2、iPad Mini 4、iPad Pro のみ) とピクチャ イン ピクチャを導入して、iPad で新しいマルチタスキング機能を提供します。 以下のセクションでは、これらの機能について詳しく説明します。

スライド オーバー

スライド オーバー機能を使用すると、ユーザーは 2 つ目のアプリを選択し、それを小さなスライド パネルに表示してすばやく操作できます。 スライド オーバー パネルは一時的なもので、ユーザーがメイン アプリの操作に戻ると閉じます。

[スライド オーバー] パネル

覚えておくべき主な点は、横に並べて実行する 2 つのアプリを決めるのはユーザーであり、開発者はこのプロセスを制御できないことです。 その結果、Xamarin.iOS アプリがスライド オーバー パネルで正しく実行されるようにするために必要な処理がいくつかあります。

  • Autolayout クラスと Size クラスを使用する - Xamarin.iOS アプリをスライドアウト サイド パネルで実行できるようになったため、UI をレイアウトするのに、デバイス、その画面サイズ、または向きに依存できなくなります。 アプリでインターフェイスを正しくスケーリングできるようにするには、Autolayout クラスと Size クラスを使用する必要があります。 詳細については、統合ストーリーボードの概要に関するドキュメントを参照してください。
  • リソースを効率的に使用する — アプリが実行中の別のアプリとシステムを共有できるようになったため、アプリでシステム リソースを効率的に使用することが重要です。 メモリがスパースになると、システムは、最も多くのメモリを消費しているアプリを自動的に終了します。 詳細については、Apple の iOS アプリ向けエネルギー効率ガイドを参照してください。

スライド オーバーは、iPad Pro、iPad Air、iPad Air 2、iPad Mini 2、iPad Mini 3、または iPad Mini 4 でのみ使用できます。 スライド オーバー用にアプリを準備する方法の詳細については、Apple の iPad でのマルチタスキング拡張機能の採用に関するドキュメントを参照してください。

分割ビュー

サポートされている iPad ハードウェア (iPad Air 2、iPad Mini 4、iPad Pro のみ) では、ユーザーは 2 つ目のアプリを選び、分割画面モードで現在実行中のアプリと並べて実行できます。 ユーザーは、画面上の区切り線をドラッグすることで、各アプリが占有するメイン画面の割合を制御できます。

分割ビュー

スライド オーバーと同様に、横に並べて実行する 2 つのアプリを決めるのはここでもユーザーであり、開発者はこのプロセスを制御できません。 その結果、分割ビューは Xamarin.iOS アプリに同様の要件を設定します。

  • Autolayout クラスと Size クラスを使用する - Xamarin.iOS アプリをユーザーが指定したサイズで分割画面モードで実行できるようになったため、UI をレイアウトするのに、デバイス、その画面サイズ、または向きに依存できなくなります。 アプリでインターフェイスを正しくスケーリングできるようにするには、Autolayout クラスと Size クラスを使用する必要があります。 詳細については、統合ストーリーボードの概要に関するドキュメントを参照してください。
  • リソースを効率的に使用する — アプリが実行中の別のアプリとシステムを共有できるようになったため、アプリでシステム リソースを効率的に使用することが重要です。 メモリがスパースになると、システムは、最も多くのメモリを消費しているアプリを自動的に終了します。 詳細については、Apple の iOS アプリ向けエネルギー効率ガイドを参照してください。

分割ビュー用にアプリを準備する方法の詳細については、Apple の iPad でのマルチタスキング拡張機能の導入に関するドキュメントを参照してください。

ピクチャ イン ピクチャ

新しいピクチャ イン ピクチャ機能 (PIP とも呼ばれます) を使用すると、ユーザーは、実行されている他のアプリに重ねて画面の任意の場所に配置できる小さなフローティング ウィンドウでビデオを視聴できます。

ピクチャ イン ピクチャのフローティング ウィンドウの例

スライド オーバーおよび分割ビューと同様に、ユーザーはピクチャ イン ピクチャ モードでビデオを視聴する操作を完全に制御できます。 アプリの主な機能がビデオ視聴の場合は、PIP モードで正しく動作するようにいくつかの変更が必要です。 それ以外の場合、PIP をサポートするために変更は必要ありません。

アプリがユーザーの要求に応じて PIP ビデオを表示するには、AVKit または AV Foundation API を使用している必要があります。 Media Player フレームワークは iOS 9 で非推奨になり、PIP はサポートされていません。

ピクチャ イン ピクチャは、iPad Pro、iPad Air、iPad Air 2、iPad Mini 2、iPad Mini 3、または iPad Mini 4 でのみ使用できます。 詳細については、Apple の「Pictピクチャ イン ピクチャ クイック スタート」のドキュメントを参照してください。

アプリでのマルチタスキングのサポート

既存の Xamarin.iOS アプリの場合、アプリが Apple の設計ガイドと iOS 8 のベスト プラクティスに既に従っている限り、マルチタスキングのサポートはわかりやすいタスクです。 つまり、アプリでは、ユーザー インターフェイス レイアウトに Autolayout クラスと Size クラスを含むストーリーボードを使用する必要があります (詳細については、統合ストーリーボードの概要を参照してください)。

これらのアプリでは、マルチタスキングをサポートし、その中で適切に動作するために、変更はほとんどまたはまったく必要ありません。 アプリの UI が、C# コードでの UI 要素の直接配置やサイズ変更などの他の方法を使用して作成された場合、または特定のデバイスの画面サイズや向きに依存している場合は、iOS 9 マルチタスキングを正しくサポートするために大幅な変更が必要になります。

新しい Xamarin.iOS アプリで iOS 9 マルチタスキングをサポートするには、ここでも、すべてのアプリのユーザー インターフェイス レイアウトに対して Autolayout クラスと Size クラスを含むストーリーボードを使用し、次のセクションの手順を実装します。

画面サイズと向きに関する考慮事項

iOS 9 より前は、特定のデバイスの画面サイズと向きに合わせてアプリを設計できました。 アプリはスライド アウト パネルまたは分割ビュー モードで実行できるようになったため、デバイスの物理的な向きや画面サイズに関係なく、iPad のコンパクトまたは標準の横方向サイズ クラスで実行できます。

画面サイズと向きに関する考慮事項

iPad では、全画面表示アプリには標準の横方向および縦方向の Size クラスがあります。 iPhone 6 Plus と iPhone 6s Plus を除くすべての iPhone は、両方向の任意の向きにコンパクト Size クラスがあります。 横モードの iPhone 6 Plus と iPhone 6s Plus には、通常の横方向 Size クラスとコンパクトな縦方向 Size クラス (iPad Mini と同様) があります。

スライド オーバーと分割ビューをサポートする iPad では、次の組み合わせになります。

向き プライマリ アプリ セカンダリ アプリ
画面の 75%
コンパクトな横方向
通常の縦方向
画面の 25%
コンパクトな横方向
通常の縦方向
画面の 75%
通常の横方向
通常の縦方向
画面の 25%
コンパクトな横方向
通常の縦方向
画面の 50%
コンパクトな横方向
通常の縦方向
画面の 50%
コンパクトな横方向
通常の縦方向

このアプリの例では、横モードの iPad で全画面表示を実行すると、一覧と詳細ビューの両方が同時に表示されます。

同時に表示されている一覧と詳細ビュー

スライド オーバー パネルで同じアプリが実行されている場合は、コンパクトな横方向 Size クラスとしてレイアウトされ、一覧のみが表示されます。

デバイスが水平方向の場合はリストのみを表示

このような状況でアプリが正しく動作することを確認するには、Size クラスと共に特性コレクションを採用し、IUIContentContainerIUITraitEnvironment インターフェイスに準拠する必要があります。 詳細については、Apple の UITraitCollection クラス リファレンスと、統合ストーリーボードの概要ガイドを参照してください。

さらに、デバイスの画面境界に依存してアプリの表示領域を定義することはできなくなりました。代わりに、アプリのウィンドウ境界を使用する必要があります。 ウィンドウの境界はユーザーが完全に制御できるため、プログラムで調整したり、ユーザーがこれらの境界を変更できないようにしたりすることはできません。

最後に、アプリでは、一連の .png イメージ ファイルを使用するのではなく、ストーリーボード ファイルを使用して起動画面を表示し、スライド オーバー パネルまたは分割ビュー モードで実行するために考慮される 4 つのインターフェイスの向き (縦向き、逆さまの縦向き、左横向き、右横向き) をすべてサポートする必要があります。

カスタム ハードウェア キーボード ショートカット

iPad で実行されている iOS 9 では、Apple はハードウェア キーボードのサポートを拡張しました。 iPad には、Bluetooth と、一部のキーボード メーカーが作成した、物理的に組み込まれた iOS 固有のキーを含むキーボードを介した、基本的な外部キーボード サポートが常に含まれています。

iOS 9 では、アプリで独自のカスタム キーボード ショートカットを作成できるようになりました。 さらに、Command-C (コピー)、Command-X (切り取り)、Command-V (貼り付け)、Command-Shift-H (ホーム) などのいくつかの基本的なキーボード ショートカットは、アプリにそれらへの応答が特に書き込まれていなくても使用できます。

Command-Tab を使用すると、Mac OS と同様に、ユーザーがキーボードからアプリをすばやく切り替えることができるアプリ スイッチャーが表示されます。

アプリスイッチャー

iOS 9 アプリにキーボード ショートカットが含まれている場合、ユーザーは Command キー、Option キー、または Control キーを押して、それらをポップアップに表示できます。

スクリーンショットは、アプリのキーボード ショートカットを示す。

カスタム キーボード ショートカットの定義

アプリのビューまたはビュー コントローラーに次のコードを追加すると、そのビューまたはコントローラーが表示されているときに、カスタム キーボード ショートカットを使用できるようになります。

#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 を作成します。 キーストロークがアクティブになると、(Export コマンドを使用して iOS 9 に公開されている) NewEntry メソッドを呼び出して、要求されたアクションを実行します。

ハードウェア キーボードが接続されている iPad でこのアプリを実行し、ユーザーが Command-N キーを押すと、新しいエントリが一覧に追加されます。 ユーザーが Command キーを押したままにすると、ショートカットの一覧が表示されます。

スクリーンショットは、アプリの [新しいエントリ] ショートカットを示す。

リソース管理に関する考慮事項

iOS 8 の設計ガイドとベスト プラクティスを既に使用しているアプリでも、効率的なリソース管理が引き続き問題になる可能性があります。 iOS 9 では、アプリはメモリ、CPU、またはその他のシステム リソースを排他的には使用できなくなります。

その結果、システム リソースを効果的に使用するように Xamarin.iOS アプリを微調整する必要があるか、メモリ不足の状況が発生して終了します。 これは、2 つ目のアプリが引き続きスライド オーバー パネルまたはピクチャ イン ピクチャ ウィンドウで実行された結果、余分なリソースが必要になったり、更新レートが 1 秒あたり 60 フレームを下回ったりする可能性があるため、マルチタスキングをオプトアウトするアプリにも当てはまります。

次のユーザー アクションとその影響を考慮してください。

  • スライド オーバー パネルにテキストを入力する - アプリにテキスト入力がない場合でも、システム キーボードを UI に表示できるようになりました。 その結果、アプリはキーボードの表示通知 (キーボードの表示や非表示など) に応答する必要がある場合があります。
  • スライド オーバー パネルで 2 つ目のアプリを実行する - 新しいアプリはフォアグラウンドで実行され、メモリや CPU サイクルなどのシステム リソースについて既存のアプリと競合するようになりました。
  • PIP ウィンドウでビデオを再生する - このウィンドウはアプリのインターフェイスの一部をカバーできるだけでなく、ビデオを起動したアプリはバックグラウンドで実行され、CPU リソースとメモリ リソースを消費しています。

アプリでリソースが効率的に使用されるようにするには、次の操作を行う必要があります。

  • インストルメントを使用してアプリをプロファイリングする - メモリ リーク、過剰な CPU 使用率、アプリがメイン スレッドをブロックしている可能性がある領域を確認します。
  • 状態遷移メソッドに応答する - AppDelegate.cs ファイルで、アプリがバックグラウンドに入るまたは出るなどの状態変更メソッドにオーバーライドおよび応答します。 イメージ、データまたはビュー、ビュー コントローラーなど、必要のないアセットを解放します。
  • メモリ集中型アプリと平行してテストする - 物理 iOS ハードウェア上でスライド アウトと分割ビューの両方を使用してアプリを実行し、(サテライト ビュー モードの) マップなどのメモリ集中型アプリを使用して、両方のアプリの応答性が維持され、クラッシュしないことをテストします。

リソース管理の詳細については、Apple の iOS アプリ向けエネルギー効率ガイドを参照してください。

マルチタスキングのオプトアウト

Apple は、すべての iOS 9 アプリがマルチタスキングをサポートしていることを示唆していますが、正しく動作するために全画面表示を求めるゲームやカメラ アプリなど、非常に具体的なサポートしない理由があるアプリも存在する可能性があります。

Xamarin.iOS アプリがスライド アウト パネルまたは分割ビュー モードでの実行からオプトアウトされるようにするには、プロジェクトの Info.plist ファイルを編集し、[全画面表示を必要とする] をオンにします。

マルチタスキングのオプトアウト

重要

マルチタスキングをオプトアウトすると、アプリがスライド アウト ビューまたは分割ビューで実行されなくなりますが、別のアプリがスライド アウトで実行されたり、ピクチャ イン ピクチャ ビデオがアプリと一緒に表示されたりすることは回避されません。

PIP ビデオ再生の無効化

ほとんどの場合、アプリでは、ピクチャ イン ピクチャのフローティング ウィンドウに表示されるビデオ コンテンツをユーザーが再生できるようにする必要があります。 ただし、ゲーム カット シーンのビデオなど、これが望ましくない場合があります。

PIP ビデオの再生をオプトアウトするには、アプリで次の操作を行います。

  • AVPlayerViewController を使用してビデオを表示する場合は、AllowsPictureInPicturePlayback プロパティを false に設定します。
  • AVPlayerLayer を使用してビデオを表示する場合は、AVPictureInPictureController をインスタンス化しないでください。
  • WKWebView を使用してビデオを表示する場合は、AllowsPictureInPictureMediaPlayback プロパティを false に設定します。

まとめ

この記事では、iPad 用の iOS 9 の新しいマルチタスキング機能で Xamarin.iOS アプリが正常に実行され、動作することを確認するために必要な手順について説明しました。 さらに、アプリのマルチタスキングが適切ではない場合のオプトアウトについても説明しました。