サーチ…


前書き

iOSのアクセシビリティ機能により、聴覚障がい者や視覚障害者は、VoiceOver、Voice Control、White on Black、Mono Audio、Speech to Textなどのさまざまな機能をサポートし、iOSとアプリケーションにアクセスできます。 iOSアプリでのアクセシビリティの提供とは、アプリをすべての人が利用できるようにすることです。

ビューにアクセス可能にする

あなたのUIViewサブクラスをアクセス可能な要素としてマークして、VoiceOverが認識できるようにします。

myView.isAccessibilityElement = YES;

ビューが意味のあるラベル、値、およびヒントを示していることを確認します。 Appleは、 アクセシビリティ・プログラミング・ガイドで適切な説明を選択する方法の詳細について説明しています。

アクセシビリティフレーム

アクセシビリティフレームは、VoiceOverがヒットテストのタッチ、VoiceOverカーソルの描画、およびユーザーが画面をダブルタップしたときにタップをシミュレートするフォーカスされた要素のどこにあるかを計算するために使用されます。フレームは画面座標にあることに注意してください。

myElement.accessibilityFrame = frameInScreenCoordinates;

要素や画面レイアウトが頻繁に変更される場合は、 - accessibilityFrameをオーバーライドして常に最新の矩形を提供することを検討してください。スクロールビューのサブビューの画面相対フレームを計算すると、エラーが発生しやすく、面倒です。 iOS 10では、これを簡単にするための新しいAPI、 accessibilityFrameInContainerSpace導入されました。

画面の変更

VoiceOverはほとんどの場合、コンテンツをいっぱいに読み上げ、直感的にユーザにフォローしています。悲しいかな、一般的な解決策は完璧ではありません。場合によっては、アプリケーション開発者のあなただけが、VoiceOverが最適なユーザーエクスペリエンスに焦点を当てるべき場所を知っていることがあります。幸いにも、VoiceOverは、システムアクセシビリティ通知を聞いて、フォーカスがどこに属するかについての手がかりを得ます。 VoiceOverカーソルを手動で移動するには、アクセシビリティ画面の変更通知を投稿します。

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, firstElement);

この通知がポストされると、短い一連のトーンがユーザーにその変更を通知します。 2番目のパラメータは、フォーカスする次の要素か、変更を通知する文字列のいずれかです。 VoiceOverの機能が不十分で、他の回避策がない場合は、画面の変更通知のみを送信してください。 VoiceOverカーソルを動かすことは、目撃されたユーザの画面を突き刺すようなものです。それはそのような方法の周りに導かれることを迷惑と混乱させることができます。

レイアウトの変更

多くの場合、1つの画面内のコンテンツは新しいコンテンツまたは異なるコンテンツで更新されます。たとえば、以前の質問に対するユーザーの回答に基づいて追加のオプションを表示するフォームを考えてみましょう。この場合、「レイアウト変更」通知を使用して、新しい要素に変更またはフォーカスを通知することができます。この通知は、画面変更通知と同じパラメータを受け入れます。

UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, firstElement);

発表

アナウンスは、「スクリーンロック」や「ロード終了」などの操作を必要としないイベントにユーザに警告するのに便利です。より具体的なアナウンスを使用して、画面の変更やレイアウトの変更をユーザに通知します。

UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, @"The thing happened!");

要素の順序付け

VoiceOverは、ビュー階層に関係なく、左上から右下にナビゲートします。これは、目に見えた人が「F字型のパターン」で画面をスキャンする傾向があるため、コンテンツが左から右の言語でどのように配置されるかです。 VoiceOverユーザーは、一般的なユーザーと同じ方法でナビゲートすることが期待されます。アクセシビリティにとって、予測可能性と一貫性は非常に重要です。デフォルト動作を改善するカスタマイズはしないでください(例:スワイプの順序で最初にタブバーを並べるなど)。つまり、アプリの要素の順序が驚くべきフィードバックを受け取った場合は、その経験を向上させるための方法がいくつかあります。

VoiceOverが次回以降のビューのサブビューを読み込む必要がある場合、VoiceOverは、単一のビューに含まれる要素が関連していることをVoiceOverに伝える必要があります。これを行うには、 shouldGroupAccessibiltyChildrenを設定しshouldGroupAccessibiltyChildren

myView.shouldGroupAccessibilityChildren = YES;

複数のコンテナにまたがる、またはUIKitなしでレンダリングされたインターフェイスを含む複雑なナビゲーション構造をサポートするには、親ビューにコンテナプロトコルを実装することを検討してください。

アクセシビリティコンテナ

ほとんどのUIKitクラスはUIAccessibilityProtocol実装しているため、VoiceOverはiOS上の多くのアプリケーションをナビゲートできます。コアグラフィックスやメタルを活用して描画を行うアプリケーションなど、 UIViewを使用して画面上の要素を表さない機能は、アクセシビリティのためにこれらの要素を記述する必要があります。 iOS 8.0以降、これはアクセス不可能な要素を含むUIViewプロパティを割り当てることによって行うことができます:

myInaccessibleContainerView.accessibilityElements = @[elements, that, should, be, accessible];

配列内の各オブジェクトは、 UIAccessibilityElementインスタンスまたはUIAccessibilityProtocol準拠する他のクラスにすることができます。子要素は、ユーザーがそれらをナビゲートする順序で返される必要があります。アプリケーション作成者は、アクセシビリティコンテナを使用して、VoiceOverスワイプナビゲーションの左上から右下のデフォルトの並べ替えをオーバーライドすることができます。 UIViewUIAccessibilityProtocol実装すると、 UIAccessibilityElementUIViewインスタンスを同じ子アクセシビリティ要素の配列に組み合わせることができます。要素を手動で割り当てる場合は、動的アクセシビリティプロトコルのメソッドを実装する必要はありませんが、VoiceOverで検出される要素の画面変更通知を発行する必要がある場合があります。

モーダルビュー

モーダルビューは、タスクが完了するまでユーザーの注意を完全に捉えます。 iOSは、アラートやポップオーバーなどのモーダルビューが表示されているときに、他のすべてのコンテンツを調光および無効にすることで、これをユーザーに明確にします。カスタムモーダルインターフェースを実装するアプリケーションは、VoiceOverに、 accessibilityViewIsModalを設定することによって、このビューがユーザーの完全な注意を払う必要があることをヒントする必要がありaccessibilityViewIsModal 。このプロパティは、モーダルコンテンツに含まれる要素ではなく、モーダルコンテンツを含むビューでのみ設定するようにしてください。

myModalView.accessibilityViewIsModal = YES;

ビューにモーダルとしてタグを付けると、VoiceOverは兄弟ビューを無視します。このプロパティを設定した後もVoiceOverがアプリ内の他の要素をナビゲートしている場合は、モーダルが消えるまで問題ビューを隠すようにしてください。

要素を隠す

UIViewを含むほとんどのUIKitクラスは、 UIAccessibilityProtocolを遵守し、デフォルトで正しい値を返します。 hiddenに設定されたUIViewもアクセシビリティ階層に存在せず、VoiceOverによってナビゲートされないことは当然のことです。通常、このデフォルトの動作では十分ですが、ビューがビュー階層に存在しても表示またはナビゲートできない場合があります。例えば、ボタンの集まりは、別のビューによって重なり合って、目に見えるユーザには見えないようにすることができる。ただし、技術的にはUIKitから隠されていないため、VoiceOverはまだアクセシビリティ階層に存在しているため、VoiceOverはナビゲートしようとします。このような場合は、親ビューにアクセスできないことをVoiceOverに伝える必要があります。ビューがオフスクリーンになったときに非表示に設定することで、UIKitからビューを明示的に非表示にすることでこれを行うことができます:

myViewFullofButtons.hidden = YES;

または、親ビューを表示したままにして、アクセシビリティ階層からその子を非表示にすることもできます。

myViewFullofButtons.accessibilityElementsHidden = YES;

一時的なビューは、アクセス可能な階層から要素を非表示にして、ユーザーに表示できるようにする別の場所です。たとえば、ボリュームボタンを押したときにポップアップ表示されるビューは、目撃されたユーザーには見えますが、通常のアラートのように注意を払う必要はありません。 VoiceOverがユーザーを中断させたり、新しい音量をアナウンスするために行っていた操作から離れてカーソルを移動させることは望ましくありません。このような場合は、 accessibilityElementsHiddenを使用してビューを非表示にしaccessibilityElementsHidden



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow