iOS 15 图表的可听表达-Audio Graphs API

iOS15引入了AudioGraphs API,允许开发者将图表数据转化为音频形式,以增强图表的可访问性,特别是对视力障碍用户。AudioGraphs通过将X轴表示为时间,Y轴表示为音高,将图表数据转为可听的音频图。例如,股票图表的音频表示可能是音高随时间变化的单个音调。开发者需要自定义UIView并遵循AXChart协议,设置AXChartDescriptor来实现图表的音频描述,包括标题、轴信息、数据点等。这一创新极大地提升了图表的无障碍体验。

概述

我们都知道,图表和图形可帮助用户快速识别数据中的重要特征和趋势。 但是图表和图形的可访问性方面的表达是比较难得,尤其是提供可听方面的服务。 幸运的是,iOS 15 有一个名为 Audio Graphs 的新功能帮我们解决了这个难题。

使用Audio Graphs API 可以将图表和图形中的数据转变成可听方面的信息,这样可以帮忙盲人或弱视人士更方面的获取数据。

Audio Graphs API通过将每个轴上的数据编码为音频,将图表中的数据转换为可听表示。通常,音频图将 X 轴表示为时间,将 Y 轴表示为音高。

我们可以见到它在一些场景场景中的应用: 比如说,一系列单独的音调随着时间的推移而下降可能是线性下降趋势的散点图的可听表示。

对于股票图表来说,它的可听表示可能是单个连续音调,其音高随着音频随时间(X 轴)播放而随着股票价格(Y 轴)上下调整。

图表的可听表达

要将图表表示为可访问的音频图,需要自定义UIView并采用 AXChart 协议。 class MyChartView: UIView, AXChart { var accessibilityChartDescriptor: AXChartDescriptor? } 设置AXChartDescriptor类型的accessibilityChartDescriptor 属性 ,AXChartDescriptor类型包含图表所需的所有语义信息,例如图表的标题、轴、数据点以及图表关键要点的摘要等。

例如,按国家/地区和建议零售价格来绘制车辆重量与燃油效率的图表需要四个数据轴:

  • X 轴对应于以吨为单位的汽车重量。
  • Y 轴对应于汽车燃油效率(每加仑燃料所行英里数)。
  • 每个数据点的视觉大小对应于汽车的建议零售价。
  • 每个数据点的颜色对应于汽车的原产国。

要创建图表的音频图,首先根据数据模型中的信息设置每个数据点的表示 let cars = generateData() let dataPoints = cars.map({ return AXDataPoint(x: $0.weight, y: $0.mpg, additionalValues: [.number($0.msrp), .category($0.country)], label: "\($0.make) \($0.model)")})

使用该数据点数组创建一个系列描述符。简单的数据集可能只有一系列数据;更复杂的数据集可能有多个系列。 let series = AXDataSeriesDescriptor(name: "Cars", isContinuous: false, dataPoints: dataPoints)

接着创建坐标轴描述符。 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 })

准备标题与概要 let title = NSLocalizedString("Vehicle Weight vs Fuel Efficiency by Country and MSRP", comment: "Chart title for fuel efficiency vs mpg chart") let summary = NSLocalizedString("The chart shows that fuel efficiency decreases as vehicle weight increases.", comment: "Chart summary for fuel efficiency vs mpg chart") 然后,根据创建图表描述符,将上述数据作为参数传进来。 accessibilityChartDescriptor = AXChartDescriptor(title: title, summary: summary, xAxis: weight, yAxis: mpg, additionalAxes: [msrp, country], series: [series])

最后生成的图表描述符生成一个音频图,权重为时间,每加仑燃料所行英里数为音调,建议零售价格为音调长度,原产国为音色。

总结

苹果在iOS15中引进的Audio Graphic新特性,极大的方面了图表和图形的可听化表达。基于此,我们可以方便的构建图表和图形可听化方面的产品。

分布式微服务企业级系统是一个基于Spring、SpringMVC、MyBatis和Dubbo等技术的分布式敏捷开发系统架构。该系统采用微服务架构和模块化设计,提供整套公共微服务模块,包括集中权限管理(支持单点登录)、内容管理、支付中心、用户管理(支持第三方登录)、微信平台、存储系统、配置中心、日志分析、任务和通知等功能。系统支持服务治理、监控和追踪,确保高可用性和可扩展性,适用于中小型企业的J2EE企业级开发解决方案。 该系统使用Java作为主要编程语言,结合Spring框架实现依赖注入和事务管理,SpringMVC处理Web请求,MyBatis进行数据持久化操作,Dubbo实现分布式服务调用。架构模式包括微服务架构、分布式系统架构和模块化架构,设计模式应用了单例模式、工厂模式和观察者模式,以提高代码复用性和系统稳定性。 应用场景广泛,可用于企业信息化管理、电子商务平台、社交应用开发等领域,帮助开发者快速构建高效、安全的分布式系统。本资源包含完整的源码和详细论文,适合计算机科学或软件工程专业的毕业设计参考,提供实践案例和技术文档,助力学生和开发者深入理解微服务架构和分布式系统实现。 【版权说明】源码来源于网络,遵循原项目开源协议。付费内容为本人原创论文,包含技术分析和实现思路。仅供学习交流使用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值