精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

在 SwiftUI 中實現音頻圖表

移動開發 iOS
音頻圖表功能對于視力受損的用戶來說是一項重大改進。音頻圖表功能的好處是,可以將其用于任何您想要的視圖,甚至包括圖像視圖。只需創建AXChartDescriptor?? 類型的實例。

前言

在可訪問性方面,圖表是復雜的事物之一。iOS 15 引入了一項名為“音頻圖表”的新功能。

下面我們將學習如何通過使用 accessibilityChartDescriptor 視圖修飾符為任何 SwiftUI 視圖構建音頻表示,呈現類似自定義條形圖視圖或圖像的圖表。

DataPoint 結構體

讓我們從在 SwiftUI 中構建一個簡單的條形圖視圖開始,該視圖使用垂直條形顯示一組數據點。

struct DataPoint: Identifiable {
    let id = UUID()
    let label: String
    let value: Double
    let color: Color
}

在這里,我們有一個 DataPoint 結構,用于描述條形圖視圖中的條形。它具有 id、標簽、數值和填充顏色。

BarChartView 結構體

接下來,我們可以定義一個條形圖視圖,它接受一組 DataPoint 結構體實例并將它們顯示出來。

struct BarChartView: View {
    let dataPoints: [DataPoint]

    var body: some View {
        HStack(alignment: .bottom) {
            ForEach(dataPoints) { point in
                VStack {
                    RoundedRectangle(cornerRadius: 8, style: .continuous)
                        .fill(point.color)
                        .frame(height: point.value * 50)
                    Text(point.label)
                }
            }
        }
    }
}

如上例所示,我們有一個 BarChartView,它接收一組 DataPoint 實例并將它們顯示為水平堆棧中不同高度的圓角矩形。

ContentView 結構體

我們能夠在 SwiftUI 中輕松構建條形圖視圖。接下來讓我們嘗試使用帶有示例數據的新 BarChartView。

struct ContentView: View {
    @State private var dataPoints = [
        DataPoint(label: "1", value: 3, color: .red),
        DataPoint(label: "2", value: 5, color: .blue),
        DataPoint(label: "3", value: 2, color: .red),
        DataPoint(label: "4", value: 4, color: .blue),
    ]

    var body: some View {
        BarChartView(dataPoints: dataPoints)
            .accessibilityElement()
            .accessibilityLabel("Chart representing some data")
    }
}

在這里,我們創建了一組 DataPoint 實例的示例數組,并將其傳遞給 BarChartView。我們還為圖表創建了一個可訪問元素,并禁用了其子元素的可訪問性信息。為了改進圖表視圖的可訪問性體驗,我們還添加了可訪問性標簽。

最后,我們可以開始為我們的條形圖視圖實現音頻圖表功能。音頻圖表可以通過旋鈕菜單獲得。要使用旋鈕,請在 iOS 設備的屏幕上旋轉兩個手指,就像您在撥盤。VoiceOver 會說出第一個旋鈕選項。繼續旋轉手指以聽到更多選項。松開手指選擇音頻圖表。然后在屏幕上上下滑動手指以導航。

音頻圖表允許用戶使用音頻組件理解和解釋圖表數據。VoiceOver 在移動到圖表視圖中的條形時播放具有不同音調的聲音。VoiceOver 對于更大的值使用高音調,對于較小的值使用低音調。這些音調代表數組中的數據。

實現協議

現在,我們可以討論在 BarChartView 中實現此功能的方法。首先,我們必須創建一個符合 AXChartDescriptorRepresentable 協議的類型。AXChartDescriptorRepresentable 協議只有一個要求,即創建 AXChartDescriptor 類型的實例。AXChartDescriptor 類型的實例表示我們圖表中的數據,以 VoiceOver 可以理解和交互的格式呈現。

extension ContentView: AXChartDescriptorRepresentable {
    func makeChartDescriptor() -> AXChartDescriptor {
        let xAxis = AXCategoricalDataAxisDescriptor(
            title: "Labels",
            categoryOrder: dataPoints.map(\.label)
        )

        let min = dataPoints.map(\.value).min() ?? 0.0
        let max = dataPoints.map(\.value).max() ?? 0.0

        let yAxis = AXNumericDataAxisDescriptor(
            title: "Values",
            range: min...max,
            gridlinePositions: []
        ) { value in "\(value) points" }

        let series = AXDataSeriesDescriptor(
            name: "",
            isContinuous: false,
            dataPoints: dataPoints.map {
                .init(x: $0.label, y: $0.value)
            }
        )

        return AXChartDescriptor(
            title: "Chart representing some data",
            summary: nil,
            xAxis: xAxis,
            yAxis: yAxis,
            additionalAxes: [],
            series: [series]
        )
    }
}

我們所需做的就是符合 AXChartDescriptorRepresentable 協議,并添加 makeChartDescriptor 函數,該函數返回 AXChartDescriptor 的實例。

首先,我們通過使用 AXCategoricalDataAxisDescriptor 和 AXNumericDataAxisDescriptor 類型定義 X 軸和 Y 軸。我們希望在 X 軸上使用字符串標簽,這就是為什么我們使用 AXCategoricalDataAxisDescriptor 類型的原因。在線圖的情況下,我們將在兩個軸上都使用 AXNumericDataAxisDescriptor 類型。

實現線圖

接下來,我們使用 AXDataSeriesDescriptor 類型定義圖表中的點。有一個 isContinuous 參數,允許我們定義不同的圖表樣式。例如,對于條形圖,它應該是 false,而對于線圖,它應該是 true。

struct ContentView: View {
    @State private var dataPoints = [
        DataPoint(label: "1", value: 3, color: .red),
        DataPoint(label: "2", value: 5, color: .blue),
        DataPoint(label: "3", value: 2, color: .red),
        DataPoint(label: "4", value: 4, color: .blue),
    ]

    var body: some View {
        BarChartView(dataPoints: dataPoints)
            .accessibilityElement()
            .accessibilityLabel("Chart representing some data")
            .accessibilityChartDescriptor(self)
    }
}

作為最后一步,我們使用 accessibilityChartDescriptor 視圖修飾符將符合 AXChartDescriptorRepresentable 協議的實例設置為描述我們圖表的實例。

示例截圖:

總結

音頻圖表功能對于視力受損的用戶來說是一項重大改進。音頻圖表功能的好處是,可以將其用于任何您想要的視圖,甚至包括圖像視圖。只需創建 AXChartDescriptor 類型的實例。

責任編輯:姜華 來源: Swift社區
相關推薦

2023-12-29 09:01:10

SwiftUI空狀態Product?

2022-11-18 09:03:09

SwiftUIiOS16

2023-03-15 09:00:43

SwiftUISlider

2022-02-26 19:16:08

Promoter報警通知監控圖表

2025-10-28 02:25:00

ROMA重構Native

2022-11-04 09:01:33

SwiftPlottable

2022-08-30 23:40:32

JavaScrip圖表Chart.js

2022-12-30 15:35:30

智慧醫療人工智能

2024-06-25 09:05:09

SwiftUIUIKitEntry

2022-06-06 09:01:16

SwiftUI自定義導航

2021-09-16 07:52:18

SwiftUScroll效果

2009-07-02 09:25:41

JSP實現頁面跳轉

2021-10-26 10:28:41

開發架構Kubernetes

2011-06-13 17:46:07

Qt 串口通信

2017-12-12 08:20:54

圖表視覺暗示可視化

2022-11-11 09:01:08

SwiftUI條形圖子視圖

2024-07-03 09:13:26

SwiftUI修飾符框架

2022-01-09 15:00:16

LinuxAudacity聲音編輯器

2009-12-28 17:33:19

WPF視頻音頻

2022-09-01 21:56:34

KubernetesLinkerd
點贊
收藏

51CTO技術棧公眾號

欧美韩国日本不卡| 亚洲激情成人| 欧美疯狂做受xxxx富婆| 中国一级黄色录像| 国产综合在线播放| 视频一区视频二区在线观看| 色偷偷偷亚洲综合网另类| 欧美国产在线一区| 日韩伦理福利| 日韩毛片一二三区| 精品中文字幕人| 中文字幕在线一| 亚洲国产1区| 中日韩美女免费视频网址在线观看| 久久久久xxxx| 久久人体大尺度| 一区二区在线免费观看| 欧美日韩精品久久久免费观看| 国产一区二区三区黄片| 国产精品一二| 欧美片一区二区三区| 性猛交娇小69hd| 美国成人xxx| 欧美一区二区久久久| 久久久久久久久久久久久久国产| 成人在线app| 国产三级欧美三级| 国新精品乱码一区二区三区18| 91中文字幕在线播放| 久久国产精品毛片| 国内精品国产三级国产在线专| 福利视频第一页| 国产精品三级| 日韩电视剧在线观看免费网站| 波多野结衣在线免费观看| 91精品韩国| 一本大道av伊人久久综合| 日韩精品一区二区免费| av网站导航在线观看免费| 国产精品久久久久影视| 欧美三级电影在线播放| 韩国中文字幕hd久久精品| 激情综合色综合久久综合| 国产精品电影观看| 波多野结衣视频在线看| 免费久久99精品国产自在现线| 午夜精品一区二区三区在线| 免费麻豆国产一区二区三区四区| 99久久精品费精品国产风间由美| 伊人成人开心激情综合网| 91精品国产自产| 草莓视频一区二区三区| 欧美精选午夜久久久乱码6080| 九色91popny| 久久久人成影片一区二区三区在哪下载| 精品毛片网大全| 国产97在线 | 亚洲| av资源中文在线| 午夜久久久影院| 国产乱子伦农村叉叉叉| 中国字幕a在线看韩国电影| 亚洲.国产.中文慕字在线| 亚洲一区二区在线看| 91网页在线观看| 国产精品对白交换视频| 国产日本欧美在线| 日韩精品亚洲人成在线观看| 亚洲一区二区三区四区五区黄| avav在线播放| 岛国在线视频网站| 日韩欧美中文字幕在线播放| 国产a级片免费观看| 日韩av一级| 欧美精品自拍偷拍| 国模大尺度视频| 操欧美女人视频| 亚洲欧洲视频在线| 一二三四国产精品| 影音先锋日韩精品| 欧美激情a在线| 亚洲日本韩国在线| 日本不卡一二三区黄网| 亚洲自拍偷拍色图| 天天干天天摸天天操| 久久精品亚洲精品国产欧美| 亚洲免费精品视频| 免费污视频在线| 欧美日韩一区二区在线播放| 九九精品久久久| 亚洲小说春色综合另类电影| 亚洲美女久久久| 自拍偷拍第9页| 亚洲精品九九| 国产精品丝袜视频| 亚洲伦理在线观看| 亚洲国产精品精华液ab| 久久www视频| 国产精品极品美女在线观看| 欧美另类一区二区三区| 成熟妇人a片免费看网站| 最新亚洲精品| 色综合天天狠天天透天天伊人| 亚洲免费在线观看av| 久久福利视频一区二区| 国外成人在线视频网站| 老司机午夜在线| 色综合久久综合网欧美综合网| 激情文学亚洲色图| 自拍自偷一区二区三区| 欧美精品中文字幕一区| 久久久久久无码午夜精品直播| 精品午夜久久福利影院| 蜜桃麻豆91| 性xxxxfjsxxxxx欧美| 在线免费观看日本一区| 国产精品手机在线观看| 五月开心六月丁香综合色啪| 欧美制服第一页| 亚洲黄色小说网址| 中文字幕在线视频一区| 国产亚洲天堂网| 国产精品jk白丝蜜臀av小说| 日韩有码在线电影| 波多野结衣高清视频| www.亚洲精品| 国产成人亚洲综合无码| 欧美高清xxx| 一本色道久久综合狠狠躁篇怎么玩 | 水蜜桃在线免费观看| 午夜无码国产理论在线| 日韩电影中文字幕在线| 久久久精品国产sm调教| 韩国视频一区二区| 亚洲精品国产精品久久| 色综合一本到久久亚洲91| 精品视频一区在线视频| 日韩久久精品视频| 成人午夜激情片| 国产一区二区三区在线免费| 国产精品亚洲综合在线观看| 正在播放国产一区| 中文字幕在线播放日韩| 国产精品免费视频一区| 蜜臀av免费观看| sdde在线播放一区二区| 国产91亚洲精品| 神马电影在线观看| 富二代精品短视频| 欧美亚一区二区三区| 日韩网站在线| 久久草.com| 亚洲一区站长工具| 亚洲人成电影在线观看天堂色| 国产精品视频免费播放| 91网站在线观看视频| 欧美性大战久久久久xxx | 日韩国产在线播放| 日韩不卡在线播放| 久久亚洲综合色一区二区三区| 久久久久久久中文| 精品免费av| 国产欧美最新羞羞视频在线观看| 日本中文字幕在线观看| 欧美精品日日鲁夜夜添| 成年人av电影| eeuss鲁片一区二区三区在线观看| 东北少妇不带套对白| 老司机成人在线| 热久久这里只有精品| 成人精品一区| 91精品国产综合久久久久久久| 99视频只有精品| 99视频一区二区| 日本xxxxxxx免费视频| 99热在线成人| 国产aⅴ精品一区二区三区黄| cao在线视频| 亚洲性日韩精品一区二区| 11024精品一区二区三区日韩| 亚洲日本一区二区三区| 制服丝袜在线第一页| 久久久噜噜噜| 2021狠狠干| 日本在线中文字幕一区| 国产精品自产拍在线观看中文| av观看在线| 亚洲女人天堂av| 99久久久久成人国产免费| 午夜精品久久久久久久99樱桃| 丰满少妇一区二区| 国内外成人在线视频| 久草热视频在线观看| 日本道不卡免费一区| 国产精品美女黄网| 久久久精品一区二区毛片免费看| 久久久久久久国产| а√天堂中文在线资源bt在线| 欧美tk—视频vk| 日韩国产亚洲欧美| 亚洲国产日韩精品| 亚洲欧美日韩第一页| 白白色 亚洲乱淫| 亚洲免费成人在线视频| 中文日韩在线| 777久久精品一区二区三区无码 | 欧美高清中文字幕| blacked蜜桃精品一区| 国产欧美欧洲| 国产一区二区视频在线看| 国产99久久精品一区二区永久免费 | 调教视频免费在线观看| 亚洲国产精品久久久久秋霞蜜臀| 在线观看日批视频| 欧美日韩另类视频| 欧美第一页在线观看| 国产三级三级三级精品8ⅰ区| 性农村xxxxx小树林| 韩国成人福利片在线播放| 青青青在线视频免费观看| 亚洲精品麻豆| 国产免费裸体视频| 外国成人激情视频| 特级西西444www大精品视频| 日韩高清成人在线| 翡翠波斯猫1977年美国| 国产高清精品二区| 国产日韩精品在线| 国产精品4hu.www| 日韩免费黄色av| 男人的天堂免费在线视频| 九九视频直播综合网| 嫩草香蕉在线91一二三区| 一本色道久久88精品综合| 国产在线黄色| 亚洲天堂日韩电影| 毛片在线播放网站| 亚洲另类图片色| 你懂的在线看| 亚洲欧美综合精品久久成人| 日本免费不卡| 日韩精品有码在线观看| 日色在线视频| 亚洲欧美一区二区三区情侣bbw| 丝袜视频国产在线播放| 亚洲精美色品网站| 色欲av永久无码精品无码蜜桃| 亚洲成av人片在线观看香蕉| 成人免费观看在线视频| 精品电影一区二区三区| 日韩一卡二卡在线| 亚洲国产黄色片| 天堂av在线播放| 亚洲区中文字幕| 成人18在线| 日韩三级成人av网| 91网址在线观看| 韩国国内大量揄拍精品视频| av在线播放资源| 欧美在线观看网址综合| 欧美男女交配| 国产精品自产拍在线观看| 国产999精品在线观看| 99精品99久久久久久宅男| 在线播放一区二区精品视频| 国产精品免费视频一区二区| 日日狠狠久久偷偷综合色| 欧美精品一区在线| 欧美综合一区| 中国黄色录像片| 一区在线播放| 日韩亚洲在线视频| 精品一区二区三区欧美| 国产女主播在线播放| 91蜜桃视频在线| 91制片厂在线| 亚洲一级二级三级| 男人天堂av在线播放| 欧美日本在线一区| 丁香六月天婷婷| 亚洲视频专区在线| 最新黄网在线观看| 欧美在线激情网| 99视频有精品高清视频| 国产精品国色综合久久| 国产一区二区三区四区五区| 日本黄色a视频| 国产欧美丝祙| 加勒比av中文字幕| 97久久人人超碰| 一区二区三区影视| 大桥未久av一区二区三区| 亚洲视频在线观看一区二区 | 国产精品视频永久免费播放 | 久久精品国产99国产| 丰满少妇xbxb毛片日本| 中文字幕欧美国产| 成人午夜视频精品一区| 7799精品视频| 九九热视频在线观看| 欧美激情国内偷拍| 成人黄色图片网站| 久草精品电影| 欧美福利网址| 尤物国产在线观看| 91蝌蚪porny| 免费在线视频观看| 欧美日韩国产综合草草| 婷婷国产在线| 欧美国产亚洲视频| 欧美性aaa| 欧美日韩一区在线观看视频| 国语精品一区| 天堂中文av在线| 国产精品视频你懂的| 在线天堂中文字幕| 亚洲第一页中文字幕| caopeng在线| 国产一区二区在线免费视频| 国产精品美女久久久久久不卡| 拔插拔插海外华人免费| 国产自产v一区二区三区c| 免费观看a级片| 欧美午夜视频一区二区| 高潮毛片7777777毛片| 久久影院免费观看| 色综合视频一区二区三区日韩 | 欧美性受xxxx黑人xyx性爽| 四虎影视在线播放| 57pao成人永久免费视频| 99re6热只有精品免费观看| 熟妇熟女乱妇乱女网站| 国产在线精品一区二区三区不卡| www亚洲色图| 欧美亚洲免费在线一区| 国产在线自天天| 日韩av电影国产| 一区三区在线欧| av天堂永久资源网| 久久伊人蜜桃av一区二区| 久久99精品波多结衣一区| 亚洲国产天堂久久综合| wwwww亚洲| 国产一区二区精品在线| 亚洲深夜av| wwwwww日本| 在线视频国产一区| 97人人在线| 成人在线精品视频| 女人色偷偷aa久久天堂| 欧美日韩一区二区区别是什么| 亚洲愉拍自拍另类高清精品| 亚洲精品国产手机| 国精产品一区一区三区有限在线| 国产乱人伦精品一区| 国产视频九色蝌蚪| 国产色产综合产在线视频| 国产精品高清无码| 日韩亚洲欧美成人| 日本免费一区二区三区视频| 黄色片免费在线观看视频| 不卡的电视剧免费网站有什么| 中日韩黄色大片| 国产亚洲精品美女| 97久久中文字幕| 久久精品xxx| 久久久久久亚洲综合影院红桃 | 韩国女主播成人在线| 国产这里有精品| 日韩av影片在线观看| 亚洲成人激情社区| 免费成人进口网站| av激情亚洲男人天堂| 无码人妻精品一区二区50| 久久激情视频免费观看| 国产伦理久久久久久妇女| 男人亚洲天堂网| 亚洲欧美偷拍三级| 香蕉视频国产在线| 国产精品日韩欧美综合| 欧美精品啪啪| 日本高清www| 91精品国产麻豆| av日韩亚洲| 超级碰在线观看| 久久精品人人做人人综合 | 成人精品国产亚洲| 中文字幕精品在线播放| 91麻豆国产福利精品| 国产精品九九九九| 欧美一区二区色| 五月天综合网站| 魔女鞋交玉足榨精调教| 91精品黄色片免费大全| 成人影院网站| 蜜桃网站在线观看| 久久精品视频网| 欧美熟妇另类久久久久久不卡| 国产剧情久久久久久| 一本色道久久综合| 欧美日韩综合一区二区|