記事
チャートデータをオーディオグラフとして表現
VoiceOver がデータの音声表現を構築できるように、あなたのグラフのコンポーネントのアクセス可能な表現を定義します。
概観
あなたのチャートをアクセシブルなオーディオグラフとして表現するには、あなたのチャートのビューモデルに AXChart プロトコルを採用します。accessibilityChartDescriptor プロパティを、グラフのタイトル、軸、データ点、グラフの重要なポイントの概要など、オーディオインターフェイスを通じてグラフを表現するために必要なすべての意味情報が含まれている AXChartDescriptor に設定します。
- class MyChartView: UIView, AXChart {
var accessibilityChartDescriptor: AXChartDescriptor?
- }
たとえば、国およびメーカー希望小売価格 (MSRP) ごとの燃費に対する車両重量をプロットしたグラフには、以下の 4 つのデータ軸があります。
X 軸は車両の重量をトン単位で表します。
Y 軸は、MPG(Miles Per Gallon) での車の燃費に対応します。
各データポイントの視覚的なサイズは、自動車のメーカー希望小売価格に対応します。
各データポイントの色は、自動車の製造国に対応しています。
チャートのオーディオグラフを作成するには、まずあなたのデータモデル内の情報に基づいて各データポイントの表現を設定します。そのデータポイントの配列を使用して、 シリーズ記述子 (データポイントのコレクションを記述するコンテナ) を作成します。単純なデータセットには 1 つのデータシリーズしか含まれません。より複雑なデータセットには複数のシリーズが含まれます。
- let cars = generateData()
- // Generate the data points from the model data.
- let dataPoints = cars.map({
return AXDataPoint(x: $0.weight,
y: $0.mpg,
additionalValues: [.number($0.msrp), .category($0.country)],
label: "\($0.make) \($0.model)")
- })
- // Make the series descriptor.
- let series = AXDataSeriesDescriptor(name: "Cars",
isContinuous: false,
dataPoints: dataPoints)
次に、チャートの軸の記述子を設定します。数値軸の場合は、valueDescriptionProvider (valueDescriptionProvider) クロージャを使用して、データ値を、単位を含む文字列表現にフォーマットします。NumberFormatter (NumberFormatter) や DateFormatter (DateFormatter) などのフォーマッタを使用して、より複雑な形式の文字列を生成することを検討してください。
- // Make the axis descriptors.
- let weight = AXNumericDataAxisDescriptor(title: "Weight",
range: 0...5,
gridlinePositions: [0, 1, 2, 3, 4, 5]) { value -> String in
let format = NSLocalizedString("%.2f tons",
comment: "Format string for values in tons")
return String.localizedStringWithFormat(format, value)
- }
- let mpg = AXNumericDataAxisDescriptor(title: "Fuel Efficiency",
range: 0...50,
gridlinePositions: [0, 10, 20, 30, 40, 50]) { value -> String in
let format = NSLocalizedString("%ld miles per gallon",
comment: "Format string for values in miles per gallon")
return String.localizedStringWithFormat(format, value)
- }
- let msrp = AXNumericDataAxisDescriptor(title: "MSRP",
range: 0...150000,
gridlinePositions: []) { value -> String in
let format = NSLocalizedString("%ld MSRP",
comment: "Format string for MSRP values")
return String.localizedStringWithFormat(format, value)
- }
- let country = AXCategoricalDataAxisDescriptor(title: "Country",
categoryOrder: cars.compactMap{ $0.country })
チャートのデータに関するコンテキストを提供しやすくするために、ローカライズされたタイトルを含め、チャート内のデータの重要なポイントを要約する概要を作成することを検討してください。
- // Write a localized title for the chart.
- let title = NSLocalizedString("Vehicle Weight vs Fuel Efficiency by Country and MSRP",
comment: "Chart title for fuel efficiency vs mpg chart")
- // Write a summary of the chart's data.
- let summary = NSLocalizedString("The chart shows that fuel efficiency decreases as vehicle weight increases.",
comment: "Chart summary for fuel efficiency vs mpg chart")
次に、チャートのコンポーネントの個々の記述子に基づいてチャート記述子を作成します。
- // Make and set the chart descriptor.
- accessibilityChartDescriptor = AXChartDescriptor(title: title,
summary: summary,
xAxis: weight,
yAxis: mpg,
additionalAxes: [msrp, country],
series: [series])
結果として得られるチャート記述子は、時間として重さ、ピッチとして MPG(燃費)、音の長さとしてのMSRP(メーカー希望小売価格)、および音色として原産国を含むオーディオグラフを生成します。
トップへ
トップへ
トップへ
トップへ
トップへ
トップへ
トップへ
トップへ
トップへ
トップへ
トップへ
トップへ
トップへ
トップへ
トップへ
トップへ
トップへ
トップへ