ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
Switch ControlのAppアクセシビリティ
Switch Controlはモビリティに多大な制限を受ける人にとって非常にパワフルなアクセシビリティテクノロジーとなります。その機能はiOS上でネイティブに提供され、tips、 tricksといくつかのAPIを使いより優れたSwitch Controlを作成することも可能です。他の人がどのようにSwitch Controlを使っているかをご紹介し、Appの中で効果的にこれらを提供する成功事例もお見せします。 このセッションを最大限に活用するためには、全般的なアクセシビリティの理念とVoiceOverアクセシビリティAPIの基本的な知識が必要です。より詳細については、"Making Apps More Accessible With Custom Actions"、"Writing Great Accessibility, Labels"、"VoiceOver: App Testing Beyond The Visuals"をご覧ください。
リソース
関連ビデオ
WWDC19
-
ダウンロード
こんにちは WWDCへようこそ “Switch Controlのアプリケーション アクセシビリティ” ソマーです Switch Controlの アクセシビリティについて話します Switch Controlは とても重要な技術であり 運動機能に障害を持つユーザーを サポートします APIについて運動の観点から語る機会は あまり多くありません Switch Controlをより快適に 使ってもらうためには工夫が必要です まずはSwitch Controlの概要と ユーザー像について 次にSwitch Controlのユーザーの サポートに使えるAPIについて 最後にすべての運動機能に 障害を持つ方にとって 使いやすくするための 最良事例について話します まずはSwitch Controlの概要です Switch Controlは 運動機能に制限のあるユーザーが 外部スイッチやボタンで iOSデバイスを操作するための機能です スイッチで画面上のカーソルを動かせます スイッチを有効にすると ユーザーはタップ ジェスチャー スクロール 音量調整などができます 対象ユーザーの多くは 手足の使用が制限されています よってスイッチやボタンを車椅子に取り付け 頭でのタップ 舌でのクリック 呼吸により操作するのが一般的です デバイスを電動車椅子に取り付ければ 充電しながら使うこともできます Switch Controlを理解するには ユーザーと会うのが一番です 森を移動し 口で操作するスイッチを使って 写真を撮るイアン・マッケイを紹介します
さまざまな口の動きにより カーソルの移動やタップができます イアンは口を使って スイッチを操作していましたが 操作するまでカーソルが項目を移動し続ける 自動スキャンを使っているユーザーも多いです 自動スキャンの動作を見てみましょう
スイッチを使って世界時計に 私の大好きなアムステルダムを追加します 私が何もしなくても カーソルが勝手に移動していますね タップすると ハイライトされたグループを選択できたり メニューを表示できたりします Switch Controlで 自動スキャンを使うユーザーは多いです このようなユーザー向けの アプリを作る際は注意が必要です 自動スキャンの場合 希望の項目やグループにカーソルが移った時に すぐタップせねばなりません タップミスをすれば 修正には手間がかかります ユーザーにとって他にも重要なのが 項目の効率性とグループ化です グループ化に問題があると 項目の選択に時間がかかります また 震えやその他の 不随意運動があるユーザーの場合 他の介助技術の使用時よりも タップミスの確率が高くなり得ます データの一括削除やログアウトの選択肢を 誤ってタップしてしまったら 大惨事になりかねないので エラーに対する耐性が重要です Switch Controlのユーザーの特徴や 彼らのために配慮すべき点をふまえ 彼ら向けのアプリの構築方法を見てみましょう ただしコードを見る前に 重要な点を1つ挙げます 大抵 Switch Control用の 特別対応は不要で VoiceOverに100%アクセス可能なアプリを 作成すれば問題ありません ただし操作性向上のため 特別対応が必要になることもあります 例えばVoiceOverに適用されない動作が 必要な場合です また Switch Control特有の APIを理解すれば Switch Controlのユーザー専用の アプリの設計や構築もできます それではコードの例を見てみましょう 最近 子供を持つ友人が増えています 子供たちは成長に伴い 数や形 色を学び始めます 私は手作りの贈り物が好きなので 子供用のアプリを作ります これはShape Shuffleという 子供の学習を促すゲームです 指示どおり数と形と色のカードを選び クリアするたびに難易度が上がります この動画で遊び方を説明します ホーム画面で 曲がりくねった線上の レベルから3を選びます
すると“2 青 四角形”という プロンプトが出るので プロンプトを満たす3枚のカードを探すため カードをタップして裏返します 青のカードを見つけました 答えに指定するにはダブルタップします すると上に表示されます 次に2または四角形を捜すため カードをタップし続けます
ないですね
2のカードがあったので ダブルタップして 四角形のカードを探し続けます 四角形のカードか確信が持てない時は 後で見直すのを忘れないように カードを長押ししてピン留めをしてから 四角形探しに戻ります
これで複数のカードの中から 四角形のカードを決められます
一番下のカードにします ダブルタップして完了です 最初のレベルをクリアしました
簡単なゲームですがSwitch Controlの ユーザー向けには課題があります 第一にホーム画面の項目が グループ化されていない点です Switch Controlのカーソルは上から下 左から右へ動くので このような曲線上では 誤った順序でレベルを移動しかねません またレベルがグループ化されていないため レベル30を選ぶ場合 カーソルが到達するまで長時間 待たねばなりません 第二にカードを裏返すには タップが必要な点です 手動スキャンを設定している場合 スイッチを何度も操作せねばなりません レベルが上がるとカード数も増えるため 疲れてしまいます 最後にダブルタップと長押しを 頻繁に実行する必要がある点です Switch Controlで操作は可能でも メニューに移動してジェスチャーを選ぶ分 時間がかかってしまいます それでは第一の課題の解決法を紹介します レベル選択画面で項目が多すぎて順序どおりに スキャンできない場合の手順は2つです まずはSwitch Controlに レベルをグループ化させるため accessibilityNavigationStyleを combinedと設定します 既にコンテナビューで3つそれぞれの 階層を構築済みなので これは簡単です 次に要素の順序を制御して 上から下 左から右の順序にならないようにするため Accessibility Elementsの配列で 正しい順序を返すよう明確に設定します これによりカーソルが レベル4 5 6の順に動きます 次の課題は カードをタップして裏返すには スイッチを何度も操作する必要がある点です 自動スキャンではなく手動スキャンを 使っているユーザーは疲れてしまいます そこでカーソルが合ったカードが 自動で裏返るよう設定を追加しました accessibilityElementDidBecomeFocusedが 焦点が合う度に呼び出され カードの表面が出ます accessibilityElementDidLoseFocusが 焦点から外れると呼び出され カードの裏面に戻ります では実際に見てみましょう カードが自動的に裏返るため メニューでの操作が不要です 複数のジェスチャーを使うゲームの 最後の課題を解決する前に Accessibility Custom Actionsの概念を 簡単に紹介します Custom Actionsを用いるとVoiceOverや Switch Controlなどの介助技術でも 簡単にアプリを操作をすることができます 例えばリマインダーでは 削除やフラグなどのスワイプ動作は Custom Actionsとして表示されます これらの項目をカーソルを 移動する必要があるビューにしないことで 混乱を大幅に減らせます また一般的な動作が より速く より簡単にできるようになります それでは アプリに戻りましょう 頻繁にダブルタップと長押しをするので Switch Controlのユーザーは 何度もメニューに戻らねばなりません よってこれらを上位メニューで 簡単に選べる動作に変換するため Accessibility Custom Actions APIを 使います Switch Controlの上位メニューに 表示する動作ごとに UIAccessibilityCustomActionを作成し 各動作の項目を配列として AccessibilityCustomActionに割り当てます スイッチを有効にした時に Switch Controlの メニュー上位に表示されるようになります このスライドを終了する前に もう1つ説明します カスタムアクションの画像を設定できるよう iOS 14に新しいAPIを導入しました SF Symbolsを使い ピン動作を示すピンと 追加動作を示すプラス記号を作成しました 画像を使わない場合は デフォルトの動作が表示されます メニュー項目には 動作名の頭文字が表示されます Switch Controlで実行中のゲームを 見てみましょう カードを自動で裏返すために 自動スキャンをやめたので スイッチを2つ使います 右の赤いスイッチでカーソルを次の項目に移し 左の黄色のスイッチでグループを選ぶか メニューを表示します 手動スキャンなので カードの自動反転機能が有効化されています “6 青 三角形”のカードを捜すため メニューの上位にあるピン動作を使い 右上のカードをピン留めします カードをめくり続け 青いカードを見つけたら 別の動作で追加します APIから離れる前に Switch Control向けの 有効な手段とプロパティを紹介します まず Switch Controlが 実行中かを確認するには isSwitchControlRunningを呼び出すか 関連した通知を使います またUILabelなどの ユーザーがタップすると更新されるような 静的UIがある場合は 静的テキストに見えても この項目に移るように Switch Controlに伝えるため accessibilityRespondsToUserInteractionを trueに設定します APIについては以上です Switch Controlのユーザーにも 使いやすいアプリに変えたり 彼ら向けに完全に構築されたアプリを 作るヒントになれば幸いです 最後に一般的な最良の事例を数件 紹介します 運動機能に障害があるユーザーも 使いやすくする方法です これらはSwitch Controlに限らず 全ユーザーに優れた操作性を提供します まず 破壊的な動作や重要度の高い動作は ユーザーの確認を得てください 項目のタップミスをしやすい Switch Controlのユーザーは特に データの一括削除や アカウントの削除のリスクがあるので重要です 次に 特にSwitch Controlの実行中は アプリで制限時間を設けるのは避けましょう ペアリングコードや認証コードの入力画面では 防犯上 制限時間を短く設定しがちですが Switch Controlのユーザーは カーソルが合うのを待たないと入力できず 入力エラーの修正にも時間がかかるため 制限時間があると不便です また画面上の項目をグループ化しやすいよう ビューの階層構造を工夫しましょう 明確でわかりやすい項目のグループ化は 全ユーザーのためになります Switch Controlの実行中は 項目のグループが カーソル操作の効率と速度に より重大な影響を与えます 最後に 車椅子に取り付けられたデバイスを 使うユーザーの場合 画面上の入力情報の保護が難しいことを 覚えておきましょう 口座番号や医療情報などの個人情報を 必要以上に画面に表示しないでください セッションは以上です Switch Controlのユーザー像や 彼ら向けのアプリを構築する際に 考慮すべき点について説明しました 数行のコードを追加するだけで Switch Controlの操作性が高いゲームに カスタマイズできました 最後にSwitch Controlのユーザーに 大きな影響を与える事例を紹介しました 誰もが使いやすいアプリの構築に 参考になれば幸いです それでは引き続き WWDC 2020をお楽しみください
-
-
7:53 - Navigation Style and Element Ordering
containerView.accessibilityNavigationStyle = .combined containerView.accessibilityElements = [ levelFourView, levelFiveView, levelSixView]
-
8:47 - Follow Focus API
// Following Focus API class CardView : UIView { var orientation: CardOrientation enum CardOrientation { case front case back } override func accessibilityElementDidBecomeFocused() { self.flip(to: .front) } override func accessibilityElementDidLoseFocus() { self.flip(to: .back) } // The rest of the class… }
-
9:56 - Custom Actions API
// Custom Actions API (VoiceOver uses this too) func configureActions() { let pinAction = UIAccessibilityCustomAction( name: "Pin Card") { (_) -> Bool in self.setPinned(true) return true } pinAction.image = UIImage(systemName: "pin") let addAction = UIAccessibilityCustomAction( name: "Add Card") { (_) -> Bool in self.setSelected(true) return true } addAction.image = UIImage(systemName: "add.square") self.accessibilityCustomActions = [addAction, pinAction] }
-
11:51 - Other Useful API
static var isSwitchControlRunning: Bool { get } var accessibilityRespondsToUserInteraction: Bool { get set }
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。