ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
アクセシブルな空間体験の実現
誰にとっても使いやすい、空間コンピューティングアプリを作成する方法を紹介します。すべてのAppleプラットフォームと同様に、visionOSはアクセシビリティを考慮してデザインされています。VoiceOverやポインタコントロールのような支援技術を再構築し、滞留コントロールなどの機能をデザインすることで、どのように人々が最適な方法でインタラクションを行えるかについて解説します。視覚、運動、認知、聴覚のアクセシビリティに関するベストプラクティスを学び、visionOSのイマーシブな体験を誰でも楽しめるようにしましょう。
関連する章
リソース
- Accessibility
- Diorama
- Improving accessibility support in your visionOS app
- Media Accessibility
- UIAccessibility
関連ビデオ
WWDC23
WWDC22
WWDC21
WWDC20
WWDC19
-
ダウンロード
♪ ♪ ♪ Dan Golden:こんにちは Accessibility TeamのDanです 空間コンピューティングにおける アクセシビリティについて 同僚のDrewと話せることを嬉しく思います このトークでは このプラットフォームで利用可能な アクセシビリティ機能の概要を説明します 次に 目の不自由な方や 弱視の方々を サポートするために アプリで出来ることを解説します そして 空間コンピューティングにおける 運動機能 認知機能 聴覚機能のアクセシビリティについて Drewがお話します では始めましょう 私たちはこのイマーシブプラットフォームを すべての人のためにデザインしました 空間コンピューティング体験は 多くの場合さまざまなビジュアル機能と 様々な手による入力で 構成されていますが だからといって視覚や 身体的動きが必要なわけではありません 実際 こうした体験は 目の不自由な方 弱視の方 動きに制限のある方 手足の不自由な方にとって 信じられないほどのインパクトを 与える可能性を秘めています たとえば 目の不自由な方が ディスプレイを見ることなく 現実の世界とのやり取りが可能になります 従って アプリを作成する際には あらゆる能力を持つ人を念頭に 誰もがアプリを楽しみ 恩恵を受けられることが大切です Appleは テクノロジーへのアクセスは 基本的人権であると認識しており このプラットフォームには 過去の第一世代の製品に搭載された中でも 最も多くの アクセシビリティ機能が含まれています Dynamic Typeのサポート コントラストの強調機能 Spoken Content機能など おなじみの機能も多数含まれています 私たちは 空間コンピューティングのために 特別にフラッグシップレベルの 支援テクノロジーを再構築しました 私たちは これらの機能にワクワクしています みなさんがデベロッパとして作る体験を すべての人に届けることも その一助になります では みなさんのアプリで 視覚障がい者の方々を サポートする方法についてお話していきます 視覚アクセシビリティについて 話す際に考慮すべき点がいくつかあります VoiceOverサポート ビジュアルデザイン そしてモーションです まず VoiceOverサポートについて 説明します VoiceOverは すべてのAppleプラットフォームで 利用可能な内蔵のスクリーンリーダーです このプラットフォームにも 導入できたことを嬉しく思います Drewと私は ARKitとRealityKitを利用した Happy Beamという とても楽しいアプリに携わっています このアプリでは 手でハートのジェスチャをして 不機嫌な雲をハッピーにします では このアプリの VoiceOver体験を 改善する方法を見てみましょう 設定>アクセシビリティ> アクセシビリティショートカットに VoiceOverショートカットを追加し デジタルクラウンを3回押すと オン/オフが切り替わるようにしました これは アプリのアクセシビリティを テストする時に便利なツールです アプリを開き デジタルクラウンを3回押して VoiceOverをオンにしてみましょう ♪ 幽玄なインストゥルメンタル音楽 ♪ VoiceOver:Happy Beam 不機嫌な雲を元気づける方法を 選んでください Dan:このプラットフォームでは VoiceOverは手の指の ピンチを使い分けて 様々なアクションを行います デフォルトでは 右手の人差し指をピンチすると 次の項目にフォーカスできます ♪ VoiceOver:両手でハートを作る ボタン ピンチジェスチャまたは互換性のある デバイスを使用する ボタン Dan:前の項目にフォーカスを戻すには 右手の中指をピンチします VoiceOver:両手でハートを作る ボタン Dan:項目をアクティブにするには 右手の薬指か 左手の人差し指をピンチします VoiceOverの基本的な 操作に慣れたところで アプリの残りの部分を見てみましょう VoiceOver:3 2 1 ハッピービーム 戻るボタン スコア ゼロ 音楽停止 ボタン 残り時間29秒 ポーズ ボタン Dan:面白そうですね アプリはSwiftUIで作成されたので 私たちが使う標準的なコントロールの 多くはすでにアクセシブルです 適切なアクセシビリティ情報が VoiceOverに提供されるよう ビューの残りの部分に SwiftUIの アクセシビリティモディファイアを 使用するよう気を付けました 詳細については SwiftUI アクセシビリティのトークをご確認ください アプリの残りの部分を見て 雲とインタラクションする方法を 見てみましょう VoiceOver:ポーズ ボタン ポップアップ アプリ配置バー アプリ配置― アプリ配置― アプリ配置バー Dan:この音は VoiceOverが 項目を見つけられず 雲がVoiceOverに アクセスできないことを示しています 雲はRealityKitを使って 生成されているので RealityKitで利用できる 新しいアクセシビリティ コンポーネントを使って修正できます アクセシビリティコンポーネントでは RealityKitのエンティティに アクセシビリティプロパティを指定できます アクセシビリティのラベル 値 特性のほか カスタムローター カスタムコンテンツ カスタムアクションを設定できます また アクティベートアクションや アジャスタブルアクションなど システムのアクセシビリティアクションを 設定することもできます 雲をアクセス可能にするには 新しいアクセシビリティ コンポーネントを作成し isAccessibilityElementをtrueに設定して 雲がナビゲーション可能であることを 支援テクノロジーに示します 次に Switch Controlや Voice Controlのような テクノロジーに対し 雲とユーザーが インタラクティブであることが分かるように クラウドにボタンの特性を付与します また 雲がハッピーな状態になった時に サウンドを再生するため playsSound特性を付与します 次に labelプロパティで雲に名前を付け 不機嫌な状態かハッピーな状態かを 表す値を指定します アプリの状態が更新されるたびに アクセシビリティコンポーネントの 関連プロパティを更新してください ここでは isHappy変数のdidSetハンドラに コンビニエンスプロパティを使用することで 雲のaccessibilityValueを更新しています コンビニエンスプロパティを使用すると アクセシビリティコンポーネントの 対応するプロパティが それに応じて更新されます ラベルと値は LocalizedStringResourcesとして格納され これは文字列リテラルを使用して 作成されますが 実行時に指定した ローカライズされた値に 自動的にresolveされます 最後にエンティティコンポーネントリストに コンポーネントを設定します 雲にアクセス可能になったので アプリを見てみましょう ♪ ♪ VoiceOver:アプリ― 雲 不機嫌 ボタン Dan:素晴らしい 雲をナビゲートでき その状態を伝えてくれるようになりました VoiceOverは空間オーディオを使用して オブジェクトの位置を教えてくれます そこで 雲にハートのジェスチャをして ハッピーにしてみましょう ♪
どうしたのでしょう? 雲に愛情を注いだのに ハッピーになりませんね それは VoiceOverがオンになっていると アプリはデフォルトで 手による入力を受け付けないからです これは 誰かがVoiceOverの ジェスチャをしている間に アプリの不用意な アクションを防ぐための措置で これにより安全な操作が可能になります このプラットフォームでは VoiceOverにDirect Gesture Modeが 追加され 有効にすると VoiceOverは標準のジェスチャを処理せず 代わりにアプリが手による入力を 直接処理できるようになります ユーザーはDirect Gesture Modeと VoiceOverのデフォルトの インタラクションモードの両方から 実行モードを選択でき どちらの場合でも 考慮すべき点があります まず VoiceOverの Default Interaction Modeについて 説明します VoiceOverを使って 雲をハッピーに出来るよう activateアクションを追加します これには accessibilityComponentの systemActionsプロパティに activateアクションを追加します そして RealityView内のコンテンツの activateイベントをサブスクライブします コールバックで activateイベントを受け取るたびに ゲームモデルを更新して 関連する雲の状態が 適切に更新されるようにします アクションを追加した アプリを再び見てみましょう VoiceOver:アプリ配置― 閉じる― 雲 不機嫌 雲 不機嫌 Dan:素晴らしい これでVoiceOverを使って 雲をハッピーに出来ます AccessibilityComponentは カスタムアクション カスタムローター カスタムコンテンツなどの 追加APIも提供しています これらは アプリの アクセシビリティ体験を 向上する素晴らしいツールです 詳細については 関連するトピックのトークをご確認ください 次は Direct Gesture Modeについて 説明します これは このプラットフォームで VoiceOverを使いながらアプリと インタラクションする新しい方法です VoiceOverのactivateアクションは Direct Gesture Modeで使えないので 代わりに使う 手入力インタラクションに フィードバックを提供する必要があります まず 雲が現れたら その雲と その位置を 説明するアナウンスを記述します これは Announcementタイプで 新しい AccessibilityNotificationを作成し 発話したい文字列を渡して Announcementの post関数を呼び出します 空間体験では どんなアイテムがどこにあるかという 情報を提供することが重要ですので アナウンスは このアプリにおいて重要です また ハートのジェスチャを 認識したときや 雲が不機嫌から ハッピーに変わった時にも アナウンスを流します 何が起こっているのか どんなインタラクションが 実行されているのかを明確にするため 意味のあるイベントは 常にVoiceOverでアナウンスしましょう たとえば フルイマーシブなアプリでは 新しい部屋や環境に入るたびに その変化の内容をVoiceOverでアナウンスし その世界で利用できる 新しいアイテムを説明しましょう また アクションを実行した時の サウンドの活用も検討しましょう Happy Beamで雲が ハッピーになった時に流れるサウンドは 雲の視覚的な変化が見えなくても アプリを楽しく 空間を感じさせる 素晴らしい方法です 最後にもう一度 アナウンスが 追加されたアプリを見てみましょう ゲームが始まったら 左手の人差し指を 3回ピンチして固定し Direct Gesture Modeを有効にします すると ハートのジェスチャをして 雲をハッピーにし すべてのインタラクションに関する フィードバックを得ることができます VoiceOver:3 2 1 Happy Beam 上方 右側に3つの雲 Direct Gestures有効 クラウンを押して― ビーム発射 ♪ 不機嫌な雲に命中 ビーム停止 Dan:素晴らしい! すべてのインタラクションについて 素晴らしいフィードバックを 得ることができました 私たちのアプリはVoiceOverに対応し 改善されつつあります しかし みなさんのアプリで VoiceOverを使っていない 弱視の方々をサポートするために カスタムコンポーネントや コントロールを作成すれば 多くのことができるようになります 他のすべてのApple プラットフォームと同様に みなさんのアプリが Dynamic Typeの変更 特にアクセシビリティ設定で利用可能な 最大サイズに対応していることを ご確認ください そのような大きなサイズでは 横方向ではなく 縦方向のレイアウトの方が良い UIが無いか アプリを監査しましょう また フォアグラウンドの色と 背景の色のコントラスト比を 少なくとも4対1にして下さい 詳しくは「Appを視覚的に アクセシブルにする」をご確認ください 空間体験では アンカーを使用して 手や空間の特定の位置など さまざまなアンカーポイントに コンテンツを相対的に 配置することができます また コンテンツがディスプレイの 同じ場所に表示されるように 仮想カメラに アンカーを設定することもできます 他のAppleプラットフォームでは RealityKitのアンカーは ご存知かもしれませんが このプラットフォームで周囲を見回すと コンテンツが頭部に追従するので 弱視の方々に 異なる影響を与える可能性があります 弱視の方がコンテンツに近づいて 読んだり 詳細を見ることができるよう 頭部アンカーは 最低限の使用をおすすめします さらにアクセシビリティの ズーム機能を使用している方は ズームレンズも頭部アンカーで 固定されているため コンテンツを ズームレンズ内に簡単に配置できません 代わりに ワールドアンカーを使うか 待ち時間を入れた後 ゆっくり動かしてください どうしても頭部アンカーが 必要でも 装飾的なコンテンツにとどめましょう 重要な情報は頭部アンカー以外の コンテンツからも アクセス出来るようにしましょう 頭部アンカーが アプリで最高の体験を 提供できるメインの手段の場合でも 常に代替手段を用意しましょう SwiftUIの新しい変数である HeadAnchorAlternative Environmentと アクセシビリティフレームワークの AX PrefersHeadAnchor Alternative APIは 代替アンカーを 使うべき時を知らせてくれます これらのAPIは 頭部アンカーを採用している 場所ならば どこでも利用できます 私たちも このAPIをシステムに 採用するように配慮しています デフォルトでコントロールセンターは 折りたたまれた状態で 頭部アンカーされています 周囲を見回すとコントロールセンターが 追従してきます
このデザインにより どこからでも コントロールセンターに アクセスできるようになりましたが 人によっては 困難を伴う場合もあります 先ほど ズームも 頭部アンカーとお伝えしました これは 弱視の方のためにコンテンツを 拡大する機能です ズーム有効になっている場合 または 頭部アンカー以外の 選択肢を希望した場合 コントロールセンターは Y軸を中心に自由に動きます ここでは 頭を上に傾けると ズームレンズは 頭に追従しますが コントロールセンターはしていません ズームレンズの内側に コントロールセンターが 入ると 操作が可能になります アプリでのモーションの使い方にも 気を配ることが大切です 人によってはめまいを起こすことがあり 微妙なモーションエフェクトを 使っていても ヘッドセットの装着により 気になることがあります アプリの中で人物を 高速で移動させたり 跳ねたり 波のような 動きを伴う モーションの使用は避けましょう ズームアニメーション 複数の軸に沿って動くアニメーション 回転や 回転を伴うエフェクト 継続的な背景エフェクトも避けるべきです Reduce Motionが有効な場合 常にこれらのタイプの アニメーションの 代替手段を提供しましょう SwiftUIの accessibilityReduceMotion Environment変数で Reduce Motionが 有効かどうかを確認できます UIKitでは UIAccessibility .isReduceMotionEnabledをクエリし 対応する通知から 設定の変更を確認することができます アプリ内のモーションに 適切な代替手段が見つからない場合は クロスフェードの活用をご検討ください Reduce Motionをシステムで採用した 例をご紹介します Mount Hood Environmentでは 背景の水が常にゆらめいています Reduce Motionを有効にすると 水のゆらめきが静的になり モーションを使用することなく 同じような視覚効果が得られます 以上が アプリの視覚アクセシビリティを 向上させる方法についての概要です ですが 運動 認知 聴覚の アクセシビリティについては まだ考慮すべきことがたくさんあります それについては Drewが詳しく解説します Drew Haas:ありがとう Dan お見事でした 私の名前は Drew Haasです Accessibility Teamのエンジニアです 空間体験での 視覚アクセシビリティを向上させる 有意義な方法について学んだところで 身体機能や運動機能 認知機能 聴覚に影響を与える 障がいを持つ人々を インクルーシブにする アプリの作り方についてご説明します まず 運動機能から始めます デフォルトの入力システムは 視線と手の動きによって動作します たとえば 目でボタンを見て 手でピンチすると 選択イベントが送信され ボタンが有効になります しかし 誰もがこのような 物理的動作を行えるわけではありません 私たちのアクセシビリティ機能は 目や手 またはその両方の使用に影響を与える 障がいを持つ 人々のための代替入力方法を提供します 滞留コントロールアクセシビリティ機能は 手を使わずにUIを選択し 操作することを可能にします 滞留コントロールは タップ スクロール 長押し ドラッグなどの ジェスチャをサポートしています 滞留コントロールを使う方々が 除外されないよう このジェスチャセットで 完全に機能するよう アプリをデザインする必要があります ジェスチャモードへの切り替えは 滞留コントロールメニューを使えば簡単で 効率を犠牲にすることなく 助けを借りて操作ができます これはデザイン思想によるもので デフォルト以外の入力を使っても スムーズな体験を提供できます では Happy Beamアプリがどのように 様々な入力をサポートするようデザインされ 滞留コントロールでフルに 遊べるのかを見てみましょう Happy Beamが起動すると プレイヤーはまず 不機嫌な雲を 元気づける方法を選択します 最初のオプションは 先ほど見たように 両手をハートの形にして 雲の形に向ける方法です 2つ目のオプションは キーボードや コントローラなどの Bluetoothアクセサリを使う方法です これらの入力方法でプレイする時は ハート型の砲台から ハッピービームを発射します 砲台はタップアンドドラッグ ジェスチャにも 反応するので 片手でプレイできます そして滞留コントロールで プレイする人も 砲台のすべての機能を使えます Happy Beamのように 様々な入力に対応できるよう アプリをデザインしましょう これは 意図せず 人々を排除しないようにする最善の方法です Dwellと非常に相性の良い アクセシビリティ機能がもう1つあります 私のお気に入りの アクセシビリティ機能の1つ ポインタコントロールです この機能は 入力体験を 一変させるもので 視線の代わりに 異なる入力ソースを使い システムのフォーカスを制御できます デフォルトは視線ですが ここでは 頭の位置 手首の位置 人差し指の位置によって システムのフォーカスを変更できます ポインタコントロールは 頭の位置に追従して 入力信号を変化させるので カメラアンカーコンテンツの使用は 控えめにしてください これが ワールドアンカーを使うか カメラアンカーに代わるコンテンツの提供が 望ましいもう1つの理由です 滞留コントロールとポインタコントロールは それぞれ単独で または機能セットを組み合わせて 利用することで 非常に柔軟性のある デバイスの操作が可能になります これらの機能は システムを利用するための 身体的な要件に対応しています アプリの使用者がどのような障がいを 持っているか分からないため 複数の身体的操作の手段を許可してください 空間体験は コンテンツの 新たな次元での操作を可能にします Switch Controlの新しいメニュー オプションは ワールド空間での カメラ位置調整を可能にします ここでは Switch Controlを使って キーボードを操作し 新しい カメラポジションモディファイアを有効にしています これにより 身体を物理的に動かすことなく 空間内の位置を 下方に移動させることができます 誰ものが自分の環境で快適に あるいは自由に 動けるわけではありません このようなカメラ位置のオプションは Switch Controlで利用可能ですが 人々が特定の 方法で位置を決める必要がある 場合のために それを回避できる オプションを提供しましょう 次に 認知的アクセシビリティについて お話します 学習 記憶 情報処理に影響を与える 障がいを持つ方々を どのように サポートできるかについてお話します Guided Accessは システムを1つのアプリに 制限することで集中を促す 認知的な アクセシビリティ機能です 他のアプリをバックグラウンドにしたり 気が散るような 装飾的なUIを取り除いたり ハードウェアボタンのイベントを 抑制することで 気が散るものを 最小限に抑えることを目的としています このようにシステムを調整することで 気が散ったり脱線することなく 現在のタスクに集中し続けることができます Guided Accessの使い方と カスタム制限APIの実装方法については 昨年の私のトーク “アクセシブルなシングルAppモード体験の 実現”をご確認ください 認知的アクセシビリティのための ベストプラクティスを アプリに少し導入するだけで 誰でも とりわけ 障がいを持つ方も使いやすくなります アプリの複雑さを理解するために 少し手助けが必要な方々もいます 複雑なハンドジェスチャを必要とする インタラクションは 人々が理解し 記憶するのが難しい場合があります SwiftUIのようなAppleの UIフレームワークを使用することで 一貫性のある 親しみやすい ビジュアル体験を作成できます これにより みなさんのアプリを快適に 使用できるまでの時間が短縮されます なぜなら 他のアプリも 同じUIフレームワークを 使っている可能性が高いからです 最後に 人々が没頭し すべてに没頭できる 時間の余裕を提供しましょう 体験のために 人々を急がせる必要はありません イマーシブなコンテンツは 集中力と注意力を促進し 感覚処理に障がいを持つ人々にとって 快適な環境を作る素晴らしい方法です 誰もが同じスピードで情報を 処理できるわけではありません もう少し時間が必要な方々もいることを 忘れないでください 最後に 聴覚障がい者にアクセスを 提供したり 便宜を図るための 最善の方法をいくつか紹介します 空間体験に没入する 方法として 一般的に 音声やスピーチが用いられます 難聴の方や 聴覚処理に障がいを持つ方に対して コンテンツにアクセスできるように 質の高い字幕を提供することは 最も影響を与える方法の1つです 一語ずつ表示され 長時間の読書では 読み疲れや 吐き気の原因となる ロールアップキャプションではなく フレーズが 一度に表示され 読みやすい ポップアップキャプションを使用すると 快適な読書体験を 簡単に作り出すことができます デバイス上の字幕の 見た目を変更できることは ご存知でしょうか? 字幕は テキストのサイズ フォント 色 ストロークのアウトラインや 背景など 幅広いカスタマイズが可能です これらのオプションにより 字幕を 見やすく 読みやすくカスタマイズできます AVKitとAVFoundationは システムにビルトインされ アプリで字幕をサポートします これらのフレームワークは 字幕の見た目と ビジュアルスタイルを 自動で処理します 独自に字幕システムを 実装しており AVFoundationを使用しない場合は 2つのAPIについて 知っておく必要があります 1つ目は isClosedCaptioningEnabled APIです アクセシビリティ設定で 字幕がオンになっているかを チェックするために使用します みなさんのアプリに独自の字幕設定がある場合 このAPIを使って 字幕のデフォルト状態を通知してください これにより 字幕を必要とする人々が すぐに字幕にアクセスできるようになります もう1つは Media Accessibilityフレームワークです 各スタイル属性に個別に アクセスするためのAPIが用意されています これらのスタイルをチェックし 字幕に適用することで システム全体で一貫した 読書体験を維持できます 字幕を提供する方法に関係なく その品質には高い水準が求められます 字幕は 音楽や効果音を含む 全てのオーディオコンテンツを 表す必要があります また 音声の方向性が重要な場合は 音声が空間のどの位置から 聞こえてくるかを示すと便利です 基本的には “最も近い音源は後ろにあるかも しれません”と伝えておきます 印象的なアクセシビリティ体験は 全ての人とそのニーズを 考慮することから生まれます エンティティにアクセシビリティ プロパティを設定して RealityKitの豊かな体験を 提供しましょう これは VoiceOver Voice Control Switch Controlのような技術に 対応したアプリの アクセシビリティの基礎となります Happy Beamで見たように 身体的操作に 柔軟性のある 選択肢を提供することで 全てのプレイヤーと プレイスタイルを受け入れることができます あいまいさを取り除き 認知障がいのある人々に 明確さと集中力を提供できるよう努め 聴覚障がいのある方々が みなさんの 作品を楽しめるよう オーディオ体験のための 字幕コンテンツに時間を費やし 配慮しましょう 何から始めたらいいか分からない場合は いくつかの アクセシビリティ機能をオンにして アプリを開いてみてください これらの機能を実際に試すことは きっかけ作りに最適な方法です このプラットフォームは すべての人のためにデザインされており Danと私が今日お話した 内容に配慮することで アクセシブルで インクルーシブな 空間体験を創造できます ありがとうございました ♪
-
-
5:28 - Use AccessibilityComponent with RealityKit
var accessibilityComponent = AccessibilityComponent() accessibilityComponent.isAccessibilityElement = true accessibilityComponent.traits = [.button, .playsSound] accessibilityComponent.label = "Cloud" accessibilityComponent.value = "Grumpy" cloud.components[AccessibilityComponent.self] = accessibilityComponent // ... var isHappy: Bool { didSet { cloudEntities[id].accessibilityValue = isHappy ? "Happy" : "Grumpy" } }
-
8:04 - Add an activate action
var accessibilityComponent = AccessibilityComponent() accessibilityComponent.isAccessibilityElement = true accessibilityComponent.traits = [.button, .playsSound] accessibilityComponent.label = "Cloud" accessibilityComponent.value = "Grumpy" accessibilityComponent.systemActions = [.activate] cloud.components[AccessibilityComponent.self] = accessibilityComponent // ... content.subscribe(to: AccessibilityEvents.Activate.self, componentType: nil) { activation in handleCloudCollision(for: activation.entity, gameModel: gameModel) }
-
9:23 - Announce meaningful events and changes in context
AccessibilityNotification.Announcement("8 clouds in front of you").post()
-
13:15 - Provide alternatives to head anchored content
// SwiftUI @Environment(\.accessibilityPrefersHeadAnchorAlternative) private var accessibilityPrefersHeadAnchorAlternative // UIKit AXPrefersHeadAnchorAlternative() NSNotification.Name.AXPrefersHeadAnchorAlternativeDidChange
-
15:04 - Provide alternatives when Reduce Motion is enabled
// SwiftUI @Environment(\.accessibilityReduceMotion) private var accessibilityReduceMotion // UIKit UIAccessibility.isReduceMotionEnabled UIAccessibility.reduceMotionStatusDidChangeNotification
-
23:35 - Check whether captions are enabled
UIAccessibility.isClosedCaptioningEnabled UIAccessibility.closedCaptioningStatusDidChangeNotification
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。