WWDC Quick Look 💓 By SwiftGGTeam
Accessibility by design: An Apple Watch for everyone

Accessibility by design: An Apple Watch for everyone

元の動画を見る

ハイライト

Apple は、Apple Watch を例に挙げて、バリアフリー設計は製品の核となる使命から開始し、より多くのユーザーがハイコントラストのダイヤル、Taptic Time、VoiceOver のカスタマイズされたサウンド、および AssistiveTouch ジェスチャーを通じて時計を独立して使用できるようにする必要があることを説明しています。

主要内容

Apple Watch の中心的な使命はシンプルです。それは、必要に応じて素早く、静かに時間を知らせることです。このタスクを視覚障害者、弱視ユーザー、および片手ユーザーに適用すると、問題はすぐにより具体的なものになります。

視力の低いユーザーには、中央の視力しか残っていない可能性があります。画面が大きいほど必ずしも優れているわけではありません。手首の小さな画面は、可視領域に収まる可能性が高くなります。 Apple Watch の黒い背景とクリアテキストは当初、全員の読書時間を提供し、弱視のユーザーにも直接役立ちました。

視覚障害者は片手に杖を持って歩きます。時間を聞くために立ち止まったり、手を挙げたり、画面に触れたりすると動きが妨げられ、安全に影響を与える可能性があります。 Taptic Time と手首を上げて時刻を告げると、この動作が手首を上げる 1 回に圧縮されます。

ダイヤルにも同じ問題があります。ミッキー マウスのウォッチフェイスには、晴眼ユーザー向けのキャラクター アニメーションと足の動きがあり、VoiceOver ユーザーには最初は通常のテキスト読み上げのみが聞こえます。 Appleは後にディズニーと提携し、ミッキーが30以上の言語で時刻を告げたり、VoiceOverのステータスに基づいて笑いの頻度を調整したりできるようにした。

片方の手または腕の動きが制限されているユーザーには、別のタイプの問題点があります。それは、時計を手首に装着しているものの、もう一方の手で画面に触れることができないことです。 Apple は腕の大きな動きからテストを開始し、最終的にはつまむ、ダブルピンチ、食いしばる、ダブルクレンチという 4 つの低エネルギージェスチャに集中しました。

これらのストーリーが開発者に与える結論は単純明快です。まず製品の中核となるタスクは何かを尋ね、次に特定のタイプのユーザーがこのタスクを完了するときにどこで行き詰まるかを尋ねます。技術的なソリューションは、この行き詰まった点から成長する必要があります。

詳細

製品の中核となる使命から始める

(01:05) Apple Watch は、肌に装着するパーソナル コンピューティング デバイスです。 Apple がアクセシビリティ機能を設計するときは、その核となる価値が何であるかを問うことから始まります。時計の場合、まず時間を読むことが大切です。

このセッションには公式のコードタブはありません。以下では、実行可能な Swift スニペットを使用して、スピーチで繰り返し登場した設計レビュー プロセスの最小限のモデルを作成します。開発中に逐語的なドラフトの判断シーケンスを実行可能なチェックリストに固めるために使用される記事の例です。

struct AccessibilityNeed {
    let userGroup: String
    let productTask: String
    let barrier: String
    let designResponse: String
}

let watchNeeds = [
    AccessibilityNeed(
        userGroup: "low-vision users",
        productTask: "read the time",
        barrier: "small text and low contrast make the time hard to read",
        designResponse: "use a black background, legible letters, and a large-type watch face"
    ),
    AccessibilityNeed(
        userGroup: "blind users walking with a cane",
        productTask: "check the time while moving",
        barrier: "touching the screen requires stopping and taking one hand off the cane",
        designResponse: "speak the time after wrist raise and offer Taptic Time"
    )
]

for need in watchNeeds {
    print("For \(need.userGroup), \(need.designResponse) helps them \(need.productTask).")
}

キーポイント:

  • AccessibilityNeedユーザーグループ、製品の使命、障害、および設計上の対応を同じ構造に置きます。
  • userGroupスピーチでは、弱視ユーザーや視覚障害のあるユーザーなどの特定のグループに対応します。
  • productTaskApple Watch の中心的なタスクである読書時間に対応します。
  • barrier立ち止まる、杖を放す、画面に触れるなど、行き詰まったときにユーザーがとった行動を書き留めます。
  • designResponseハイコントラストテキスト、大きなテキストダイヤル、リストレイズアナウンス、スピーチでのタプティックタイムに対応します。
  • forループにより、検査項目が印刷可能な合格文に変換され、チームのレビュー中に 1 つずつ議論できるようになります。

高コントラストで大きな文字ダイヤル

(01:34) Apple Watch の黒い背景とクリアなフォントは、もともとすべてのユーザーが時間を素早く読めるように設計されていました。このオプションは、弱視ユーザーにも役立ちます。講演ではアッシャー症候群のユーザーについて言及した。彼女の視界は中央領域に集中し、小さな画面によりメールが読みやすくなりました。

(02:19) Apple はラージタイプのウォッチフェイス (大きな文字文字盤) についても言及しました。視覚障害のあるユーザー向けに設計されていますが、すべてのユーザーがアクセスすることもできます。

struct WatchFaceAccessibilityProfile {
    let name: String
    let background: String
    let typography: String
    let intendedBenefit: String
    let availableToEveryone: Bool
}

let largeTypeFace = WatchFaceAccessibilityProfile(
    name: "Large Type",
    background: "black",
    typography: "legible large letters",
    intendedBenefit: "help low-vision users read the time quickly",
    availableToEveryone: true
)

print("\(largeTypeFace.name): \(largeTypeFace.typography) on \(largeTypeFace.background)")

キーポイント:

  • WatchFaceAccessibilityProfileウォッチフェイスがアクセシビリティに役立つ理由を文書化します。
  • backgroundそのままの草案に記載されている黒の背景を使用します。
  • typography逐語的な草稿で言及されているように、明確な文字と大きなテキストを使用してください。
  • intendedBenefit弱視のユーザーが時間を早く読めるようにするという目標を述べます。
  • availableToEveryoneスピーチの中で「弱視ユーザー向けに設計されているが、誰でもアクセスできる」という事実に対応します。

Taptic Time と手首を上げると時刻を知らせます

(02:37) Taptic Time を使用すると、ユーザーはタッチを通じて時間を感知できます。プレゼンテーションのテスト シナリオは具体的でした。視覚障害のあるユーザーが移動していて、手で時計に触れたい場合は、立ち止まって片手を杖から外さなければなりません。より安全な方法は、手首を上げて時間を聞くか、触れて時間を知ることです。

enum TimeFeedbackMode: String {
    case spokenAfterWristRaise
    case tapticTime
    case visualFace
}

struct TimeCheckScenario {
    let situation: String
    let unsafeStep: String
    let preferredFeedback: [TimeFeedbackMode]
}

let walkingWithCane = TimeCheckScenario(
    situation: "user is walking with a cane",
    unsafeStep: "stop and take one hand off the cane to touch Apple Watch",
    preferredFeedback: [.spokenAfterWristRaise, .tapticTime]
)

print(walkingWithCane.preferredFeedback.map(\.rawValue).joined(separator: ", "))

キーポイント:

  • TimeFeedbackModeこのスピーチで言及されている 3 つのタイム フィードバック方法、音声、タッチ、およびビジュアル ダイヤルを挙げてください。
  • spokenAfterWristRaise手首を上げた後の時刻の聞き取りに対応。
  • tapticTime触覚アプリケーションの再生時間。
  • TimeCheckScenario危険なアクションを個別に書き出し、関数名だけを議論することは避けてください。
  • preferredFeedbackこれは、モバイルのシナリオでは、タッチ スクリーンよりも音声とタッチの方が適していることを意味します。

VoiceOver 用にキャラクターの声をカスタマイズする

(03:30) ミッキーマウスのウォッチフェイスは当初、視覚障害のあるユーザーからのフィードバックが不十分でした。時計の文字盤に触れると、説明または時刻の通常の音声読み上げのみが聞こえます。 Apple は、ユーザーがミッキーに自分の声を話してほしいと考えていることを聞き、ディズニーと提携して音声を録音しました。

(04:29) 音声は 30 以上の言語で録音されています。プロトタイプが公開された後、「これは適切なアクセシビリティ機能ですか?」というフィードバックが寄せられました。 「誰でも使えるの?」 Apple はまた、VoiceOver のオンとオフで異なる笑いの頻度を設定しています。VoiceOver がオンのとき、ミッキーはより頻繁に笑います。

struct CharacterVoiceFeedback {
    let character: String
    let languages: Int
    let voiceOverEnabledLaughsMoreOften: Bool
    let defaultExperienceLaughsLessOften: Bool
}

let mickeyFeedback = CharacterVoiceFeedback(
    character: "Mickey Mouse",
    languages: 30,
    voiceOverEnabledLaughsMoreOften: true,
    defaultExperienceLaughsLessOften: true
)

if mickeyFeedback.voiceOverEnabledLaughsMoreOften {
    print("\(mickeyFeedback.character) uses richer audio feedback for VoiceOver users.")
}

キーポイント:

  • CharacterVoiceFeedbackキャラクターの音声フィードバックのためのデザイン事実を文書化します。
  • languages30 以上の言語で逐語的に使用します。ここでは30下限値で表します。
  • voiceOverEnabledLaughsMoreOftenVoiceOver がオンの場合、より多くの笑い声に対応します。
  • defaultExperienceLaughsLessOftenVoiceOver をオフにすると、笑い声が少なくなります。
  • ifブランチは、同じダイヤルが VoiceOver 状態に基づいて音声密度を調整することを強調しています。

AssistiveTouch の低エネルギージェスチャ

(05:55)一部のユーザーは、Apple Watch に触れる腕や別の手を持っていません。 Apple にとっての疑問は、完全にジェスチャに基づいた人間とコンピュータの対話方法を開発できるかということです。

(06:33) チームはまず、手を上げたり、手首を回したりするなどの大きな動きを試しましたが、すぐにエネルギー消費の少ないジェスチャが必要であることがわかりました。最後に、Apple は加速度計、ジャイロスコープ、健康センサーを使用して腕の微妙な筋肉の動きを検出し、機械学習モデルに違いを区別させます。

(07:33) 最後の簡単なジェスチャには、Apple Watch に完全にアクセスするためのピンチ、ダブルピンチ、クレンチ、ダブルクレンチが含まれます。

enum AssistiveTouchGesture: String, CaseIterable {
    case pinch
    case doublePinch
    case clench
    case doubleClench
}

struct GestureDetectionInput {
    let sensors: [String]
    let modelPurpose: String
    let gestures: [AssistiveTouchGesture]
}

let watchGestureInput = GestureDetectionInput(
    sensors: ["accelerometer", "gyroscope", "heart rate sensors"],
    modelPurpose: "distinguish minute muscle movement differences in the arm",
    gestures: AssistiveTouchGesture.allCases
)

for gesture in watchGestureInput.gestures {
    print(gesture.rawValue)
}

キーポイント:

  • AssistiveTouchGestureスピーチの中で明示的に言及されているジェスチャーを 4 つだけ挙げてください。
  • CaseIterableこの例ですべてのジェスチャを反復させます。
  • sensors加速度センサー、ジャイロセンサー、心拍数を検知するヘルスセンサーに対応。
  • modelPurpose機械学習モデルのタスクに対応します: 腕の非常に微妙な筋肉の動きを区別します。
  • forサポートされているジェスチャをループで出力することで、テストやドキュメントの生成にジェスチャ コレクションを簡単に使用できるようになります。

重要ポイント

  • やるべきこと: watchOS アプリの主要なタスクの「ユーザー、タスク、障害物、対応」テーブルを作成します。 価値がある理由: Apple Watch のアクセシビリティ設計は、コントロールのリストではなく、「時間を読み取る」という中心的なタスクから始まります。 開始方法: まず、アプリ内のユーザーが毎日繰り返し実行する 3 つのアクションをリストし、次に、弱視、視覚障害、および片手のユーザーの障害記録を作成します。

  • 何をすべきか: 時間、ステータス、進捗状況などの短いメッセージに対して、触覚または音声フィードバックを提供します。 実行する価値がある理由: Taptic Time は、「歩きながら画面にタッチするのは不便」という特有の問題を解決します。 開始方法: 主要な状態が watchOS で視覚的にのみアクセス可能かどうかを確認し、それらの状態に応じた VoiceOver テキストと触覚キューをデザインします。

  • 内容: 文字ベースのインターフェイスの VoiceOver で音声エクスペリエンスを完了します。 実行する価値がある理由: ミッキー マウスのダイヤルのケースは、通常のテキスト読み上げではキャラクター自体の体験が失われることを示しています。 開始方法: アプリ内でキャラクター、ブランド効果音、またはアニメーション フィードバックがある場所を特定し、VoiceOver ユーザー向けに同等の音声フィードバックとローカライズされたテキストを準備します。

  • やるべきこと: 一般的な操作を、エネルギーの少ないジェスチャーまたは素早いアクションに凝縮します。 実行する価値がある理由: AssistiveTouch のジェスチャの選択は実際のテストに基づいており、その目標は、タスクを完了するためのユーザーの身体的負担を軽減することです。 開始方法: ユーザーがコア タスクを完了するために必要なタッチの数をカウントし、最も一般的に使用される操作をシステム アクセシビリティ アクションまたはキーボード ショートカットに公開します。

  • 内容: アクセシビリティ機能を別のモードで非表示にするのではなく、デフォルトでメイン エクスペリエンスに追加します。 価値がある理由: 大きなテキスト ダイヤルは当初、弱視ユーザー向けでしたが、後にすべてのユーザーに開放されました。ミッキーの声によるフィードバックも誰もが必要としています。 開始方法: 各アクセシビリティの改善を確認するときに、次の質問を追加します: この改善により、一般的な使用例における効率、明瞭さ、またはセキュリティも向上しますか?

関連セッション

コメント

GitHub Issues · utterances