ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
マルチタスキングAppでのウインドウ管理
このセッションでは、ウインドウを適切に作成、更新、終了する方法など、マルチタスキングAppでのウインドウ管理の詳細について説明します。ウインドウのコンテンツを更新するタイミングに関するベストプラクティスと、Appの最新の表示内容がスイッチャーに反映されるようにする方法についてご確認ください。
リソース
-
ダウンロード
(音楽)
SpringBoardチームの タルドゥッチです iPadOSでウィンドウを 管理する方法を紹介します 3つのAPIを導入し各セッションを アクティベート 更新 破棄する方法です デモに移ります プロトタイプのAppを使います
これは“クラウンタウン” パーティーのためにクラウンを探します クラウンの場所を全画面表示して マークをタップすれば詳細が見えます
動作はとても簡単です DetailViewでクラウンのIDを表示し MapViewで情報や ジェスチャなどをデリゲートします View ControllerのAPIを使います マルチタスク処理で デリゲートモデルが進化し 無料でパワフルな新機能が 加わりました まず“新規ウィンドウで開く”の ボタンを追加し 新しい機能を見つけやすくしました requestSceneSessionActivationの APIを呼び 補助ウィンドで詳細を表示します 試します このようにクラウンを 比較するだけでなく システム全体を 機能させることができます サイズの変更や移動が可能です 別のウィンドウを開いたり スイッチャーに表示したりもできます スライド移動したり 隠したりも可能です さらに2つ 開いてみましょう Crustyともう1つ―
Mr. Happyです
スワイプで スライドオーバーしたものを確認したり このように全部をスワイプできます また 地図の隣にも戻せます ここで復習です 1つのAPIで 表示や動きをデリゲートし ここまで実現しました requestScene SessionActivationです さて Mr. Happyの評価が 1つ星ですね 好評ではありません requestSceneSessionDestructionで 消去します このボタンを使います 実行 消えました 5つ星のクラウンもいましたね 再び開きましょう
Appのポリシーで 二重に開きません reqeustSceneSessionActivationの APIで 既存のセッションを再表示します
このクラウンの空き状況は ナビゲーションバーが緑なので “空き”です 予約ボタンも左上に現われました
状況が変われば通知が来ます UIを更新しバーを赤にします requestSceneSessionRefreshの APIを呼び UIのスナップショットを更新し スイッチャーに表示します まだ保留です 全員の状況も このように 確認しましょう ここでAppを隠して 友人に連絡したり 持ってるAppを表示します すると予約済みの通知が 入ってきます 名前を忘れたので エクスポゼを使い 全ウィンドウを見ます ご覧のとおり 状況が更新されています ウィンドウ処理はここで スワイプするだけです 候補が絞られたので Bubu LuBuを 予約しておきましょう
クラウンタウンは以上
オーケー (拍手) ありがとう (拍手) セッションをアクティブにする APIの話です
ローカルな ユーザインタラクションにより セッションをアクティブにします そのためにユーザは画面に触れます
requestSceneSessionActivationを UIApplicationで呼び出し 既存や新規のセッションを アクティブにします
このAppではUIApplicationで 開いていたのは 地図だけです
すべてウィンドウ内にあり ビュー階層を表示します
新規ウィンドウを 開くボタンが押されると MapViewControllerに アクセスします そしてデリゲートに追加した このメソッドを呼び出します
デュプリケートしないので 既存のセッションがあるか確認します 何も見つからないので 実行時にnilを渡します そこで新規セッションの作成が 要求され userActivityForClownを作成します そして一連のデリゲートに沿って UIKitによって userActivityが 返ってきます オプションには requestingSceneを指定 これは ユーザからの 要求だという意味です システムはこの情報を使用して requestingSceneを 置換しないようにします ナビゲーションにも使います APIを呼び出せます 新規ウィンドウが表示され セッションの階層ができました 実行すべきデリゲートメソッドが 2つあります Appで何がどう作成されるかを 管理するためです APIを呼び出した時点に戻ります UIKitが新規セッションを すぐに作成します ここで設定の指定には― configurationForSessionを 呼びます これは必須です また connectionOptionsで― 返されたuserActivityを元に セッションを選びます この例では― 詳細設定です ストーリーボードを指定した設定なら UIKitが全階層を作成するので 設定すればいいだけです sceneWillConnectToSessionを シーンデリゲートに実装します ここでもuserActivityと 接続オプションがあり ウィンドウとView Controllerの 階層を設定します
新規ではなく― 既存のセッションは? 既存の場合は シーンデリゲートから始めます その間にセッションが切断された場合は sceneWillConnectToSessionを 呼び出します シーンが接続中なら continueUserActivityを使います これらは必須です 新規または既存のセッションを アクティブにするのは ユーザ要求がある時のみです またデリゲートメソッドを実装し セッションとウィンドウの両方を 設定しましょう
次は セッションの更新です ユーザ関連の更新をします
いくつかの例です 同じアセットを表示して作業中の ウィンドウが複数あり ウィンドウや他のデバイスから 変更を加えた場合です 同期が必要ですね 最新の内容が 反映されているべきです 新規データを ユーザに表示可能にしたり セッションのメタデータの 更新などです
これには requestSceneSessionRefreshを UIApplicationで呼びます セッションを渡せば更新されます
実際は何を更新するのでしょうか セッションのState Restoration userActivityや アクティベート条件などです スナップショットにキャプチャされる UIもです これらの更新により スイッチャーでもAppが有効化され 受信データを元に行動がとれます 各セッションに移動する必要がなく 一度接続と更新をすれば十分です
アーキテクチャ面では モデル変更に注意が必要です 長寿命のオブジェクトと View Controllerの両方でです フォアグラウンドや バックグラウンドで シーンが接続していれば 通知を受け付けます そしてAPIで 内部処理を実行します
シーンが未接続だと View Controllerはなく― 代わりに長寿命オブジェクトが 更新用のAPIを呼びます シーンはバックグラウンドに接続され View Controllerが更新されます スナップショットもキャプチャされます
ユーザ関連の更新をするのは App側からです レイアウト時間を短くし スナップショットを 速くキャプチャしましょう 要求はすぐに実行されるとは限らず システムがあとで 実行する場合もあります
最後は セッションの 破棄についてです
ユーザの直接の要求が必要です または 補助ウィンドウに 削除済みのデータが ある場合も同じです 別のデバイスも含みます
破棄に使うAPIは requestSceneSessionDestructionです 対象のセッションや オプションを格納します
これはDismissalAnimationを 指定させます シーンがフォアグラウンドの場合 システムが考慮に入れるものです セッションは完全に 消去されてしまいます しかしAnimationで ユーザの意図が確認できます どれを使いましょう? 下書きメールが良い例です 保存せずキャンセルした時は ユーザは破棄を求めています ウィンドウを消去する場合に 多いケースです ユーザの意図の確認に Standardを選びます
下書きが送信された場合は 破棄を求めていませんが 最終目的の実行と共に セッションは破棄されます メールの場合は送信の実行で クラウンタウンでは予約の実行です Commitを選び セッションの最終目的が ユーザに承認されたと確認します
下書きをキャンセルし 保存する場合は ユーザは破棄を求めていません しかしユーザが 実行に移らないため セッションは破棄されます この場合 Declineを選び 最終目的が未達成だと確認します
まとめると まず セッションの破棄には ユーザの要求が必要です ユーザーの意図に的確に応答する Animationを選びます
新しいAPIで 可能な動作も増えましたね 複雑なものはデリゲートして 同時に ユーザには 強力な機能を提供できます ありがとうございます (拍手)
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。