Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Accessibility for Swift Charts

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for mika mika
August 23, 2024
620

Accessibility for Swift Charts

Avatar for mika

mika

August 23, 2024
Tweet

Transcript

  1. Swift Charts とは • Marks ◦ 折れ線グラフ ◦ 散布図 ◦

    棒グラフ ◦ 円グラフ (iOS 17.0+) ◦ ヒートマップ ◦ … • Vectorized plots (iOS 18.0+) 4 https://developer.apple.com/documentation/charts, https://developer.apple.com/jp/videos/play/wwdc2024/10155/
  2. チャートのオーディオグラフ • グラフのデータを⾳声に変換する • x 軸を時間、y 軸をピッチとして表す ◦ ⼤きな値は⾼い⾳ ◦

    ⼩さな値は低い⾳ • 連続的なデータは連続した⾳ • 離散的なデータは離散的な⾳ 12
  3. オーディオグラフの他の機能 チャートを説明 📢 • 「x 軸は ~ です。」 • 「y

    軸は ~ です。」 • 「~ 個のデータ系列があります。」 19
  4. VoiceOver / Audio Graphs の起動⽅法 1. VoiceOver を起動する ◦ 💡

    簡単に起動できるようにしておくと便利 ◦ 💡 私は電源ボタン3回クリックにアクセシビリティのショートカットを割り当てています 2. ローターの中から「オーディオグラフ」のメニューを探す ◦ ⼆本指で捻る動き、ちょっと難しい 3. 下にスワイプでメニューを切り替える ◦ オーディオグラフを再⽣ ◦ チャートの詳細 ◦ チャートを説明 4. ダブルタップで選択 20 https://support.apple.com/ja-jp/111796
  5. 開発中の動作確認⽅法 Swift Charts の VoiceOver を確認する⽅法 • Accessibility Inspector を使⽤する

    ◦ Xcode の Open Developer Tool から ◦ 💡実機と挙動が違うことがあるので、最終的には実機で検証する必要がある • 実機で検証する Swift Charts の Audio Graphs を確認する⽅法 • 実機で検証する 23
  6. 【準備】Swift Charts でグラフを作成 struct Climate: Identifiable { var id: UUID

    = .init() var month: Int var precipitation: Double } var body: some View { Chart { ForEach(data, id: \.id) { item in BarMark( x: .value("Month", item.month), y: .value("Precipitation", item.precipitation) ) } } .chartXAxisLabel("月") .chartYAxisLabel("降水量") ... } 24 https://www.data.jma.go.jp/stats/etrn/view/nml_sfc_ym.php?prec_no=44&block_no=47662&year=2023&month=&day=&view=
  7. まずは現状を把握する 25 アクセシビリティ対応していなくても、VoiceOver, Audio Graphs 共に利⽤できる → Swift Charts は

    VoiceOver, Audio Graphs を⾃動サポートしている! しかしながら、最低限の読み上げがサポートされているだけで細かい問題点はあ るので、アクセシビリティ対応していく!
  8. Accessibility Inspector で確認してみると...🤔 【VoiceOver】グラフの値の読み上げの問題 28 • 単位がないので何の値なのかわかりにくい • 降⽔量は Double

    なのに⼩数点以下が読み上げられ ていない • x 軸の値(Label)が「7 to (から) 8」などと読まれ てしまう
  9. アクセシビリティラベルを付与して解決 var body: some View { Chart { ForEach(data, id:

    \.id) { item in BarMark( x: .value("Month", item.month), y: .value("Precipitation", item.precipitation) ) .accessibilityLabel("\(item.month) 月") .accessibilityValue("\(String(format: "%.1f", item.precipitation)) ミリメートル") } } .chartXAxisLabel("月") .chartYAxisLabel("降水量") ... } 29 • 単位を追加 • ⼩数点第⼀位まで読み上げ られるように ✅
  10. var body: some View { Chart { ForEach(data, id: \.id)

    { item in BarMark( x: .value("Month", item.month), y: .value("Precipitation", item.precipitation) ) .accessibilityLabel("\(item.month) 月") .accessibilityValue("\(String(format: "%.1f", item.precipitation)) ミリメートル") } } .chartXAxisLabel("月") .chartYAxisLabel("降水量") ... } value に指定するラベルが読まれてしまっている 35
  11. var body: some View { Chart { ForEach(data, id: \.id)

    { item in BarMark( x: .value("月", item.month), y: .value("降水量", item.precipitation) ) .accessibilityLabel("\(item.month) 月") .accessibilityValue("\(String(format: "%.1f", item.precipitation)) ミリメートル") } } .chartXAxisLabel("月") .chartYAxisLabel("降水量") ... } value に指定するラベルを修正して解決 36 ここも読まれるので、⽇本語に変更 ✅
  12. 多⾔語対応するのなら ラベルは LocalizedStringKey なので、String Catalog に訳語を追加して利⽤する こともできる 37 let accessibilityValueUnit:

    LocalizedStringResource = "millimeter" let xAxisTitle: LocalizedStringResource = "Month" let yAxisTitle: LocalizedStringResource = "Precipitation" // 使う時はこんな感じ BarMark( x: .value(String(localized: xAxisTitle), item.month), y: .value(String(localized: yAxisTitle), item.precipitation) ) ✅
  13. AXChartDescripter を活⽤する 41 public struct ChartDescriptor: AXChartDescriptorRepresentable { public func

    makeChartDescriptor() -> AXChartDescriptor { ... return AXChartDescriptor( title: "東京都の月間降水量", summary: "東京都の降水量の平年値を月ごとに示しています。 ", xAxis: xAxis, yAxis: yAxis, series: series ) } } var body: some View { Chart { ... } .accessibilityChartDescriptor( ChartDescriptor(...) ) } ✅
  14. チャートのアクセシビリティ対応する時に意識すること • どんなデータなのか、どう伝えたいかを意識する • 明確に、かつ包含的に ◦ ⽇付や単位を補完する • 主観的な⽤語の使⽤は避ける ◦

    「急速に」「徐々に」「ほとんど」などは使⽤しない • 曖昧になりやすい形式や略語を避ける ◦ 6/6 ではなく6⽉6⽇、6m ではなく 6 メートル など ◦ スラッシュは「スラッシュ」と読まれてしまうので最終的には実機で検証することが⼤事 43
  15. Next steps • Apple 標準アプリのチャートで VoiceOver / Audio Graphs を試してみる

    • もし⾃⾝のプロダクトにチャートがあるなら、 VoiceOver / Audio Graphs を試して現状を把握する • 今⽇学んだことを踏まえて、アクセシビリティ対応をしよ う!! 47
  16. References • https://developer.apple.com/documentation/charts • https://developer.apple.com/documentation/Accessibility/audio-graphs • https://developer.apple.com/jp/videos/play/wwdc2024/10155/ • https://developer.apple.com/videos/play/wwdc2022/110340 •

    https://developer.apple.com/jp/videos/play/wwdc2021/10122/ • https://support.apple.com/ja-jp/111796 • https://developer.apple.com/documentation/accessibility/representing-chart-data-as-an-audio-graph • https://swiftwithmajid.com/2023/02/28/mastering-charts-in-swiftui-accessibility/ • https://www.data.jma.go.jp/stats/etrn/view/nml_sfc_ym.php?prec_no=44&block_no=47662&year=2023& month=&day=&view= 50