精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

黄页网站大全一区二区| 日韩理论电影| 欧美三级视频在线观看| 警花观音坐莲激情销魂小说| 国产刺激高潮av| 久久激情婷婷| 久久99精品久久久久久琪琪| 国产精品九九九九九| 3d动漫一区二区三区在线观看| 亚洲一区二区视频在线观看| 日韩av一区二区三区美女毛片| av网站免费播放| 日韩在线a电影| 国产做受高潮69| 国产一二三av| 色婷婷久久久| 精品少妇一区二区三区视频免付费| 国产淫片av片久久久久久| av在线网址观看| 久久久一区二区| 99在线免费观看视频| 中文字幕男人天堂| 在线亚洲一区| 欧美国产日本高清在线| jizzjizzjizz国产| 国产乱码精品一区二区亚洲 | 深爱五月综合网| 在线国产成人影院| 精品久久久久久久久久久久| 一二三在线视频| 8888四色奇米在线观看| 久久亚洲私人国产精品va媚药| av在线不卡一区| 国产精品久久久久久免费| 免费一区视频| 97在线观看视频| 国产中文字幕免费| 亚洲国产精品成人| 麻豆国产精品va在线观看不卡| 亚洲AV无码成人精品区明星换面| 欧美三级午夜理伦三级在线观看| 精品福利视频一区二区三区| 亚洲区 欧美区| 欧美经典影片视频网站| 69av一区二区三区| 第四色婷婷基地| 51一区二区三区| 欧美在线免费观看视频| 日韩视频第二页| 亚洲精华液一区二区三区| 五月天丁香久久| aa在线观看视频| 欧产日产国产精品视频| 天天综合色天天综合| 日韩国产欧美亚洲| 亚洲国产成人二区| 色综合久久综合| 大香煮伊手机一区| 3d欧美精品动漫xxxx无尽| 欧美视频在线视频| 日韩精品一区二区三区不卡| 欧美最新精品| 欧美日韩夫妻久久| 99精品999| 日韩欧洲国产| 亚洲国产天堂网精品网站| 免费黄色三级网站| 一区二区三区视频免费观看| 欲色天天网综合久久| 日日碰狠狠添天天爽| 综合天天久久| 久久露脸国产精品| 日韩精品一区不卡| 精品一区二区在线免费观看| 91pron在线| 无码国产精品一区二区色情男同| 国产亚洲短视频| 中文字幕一区综合| 国产黄色大片在线观看| 欧美性猛交xxxx乱大交极品| 天天操天天摸天天爽| 香蕉成人在线| 亚洲大胆人体在线| 99久久久久久久久久| 久久在线视频| 国外成人免费在线播放| 男操女视频网站| 国产传媒一区在线| 欧美少妇一区| 国产传媒在线播放| 欧美日韩亚洲精品内裤| 欧美一级特黄a| 成人动漫视频| 一区二区三区四区视频| 免费一级片在线观看| 亚洲永久字幕| 91视频网页| 国产九九在线| 亚洲一本大道在线| www.亚洲高清| 久久久亚洲欧洲日产| 日韩中文字幕在线观看| 福利一区二区三区四区| 免播放器亚洲一区| 狠狠色综合欧美激情| 一级日本在线| 日本丶国产丶欧美色综合| 岛国大片在线免费观看| 国产真实有声精品录音| 欧美寡妇偷汉性猛交| 中文字字幕在线观看| 成人av网站免费观看| 影音先锋欧美资源| videos性欧美另类高清| 精品日韩欧美在线| 免费看一级黄色| 久久国产福利| 国精产品99永久一区一区| 老司机福利在线视频| 在线国产电影不卡| 波多野结衣视频播放| 中文字幕人成人乱码| 国产精品久久久久久一区二区| 欧美熟妇另类久久久久久不卡 | 黄色激情视频在线观看| 极品少妇xxxx精品少妇| 日本在线成人一区二区| 国产高潮在线| 精品88久久久久88久久久| 四虎884aa成人精品| 青青草伊人久久| 欧美精品七区| 亚洲欧洲日本韩国| 日韩av中文字幕在线免费观看 | 色综合久久久久综合体| 白嫩情侣偷拍呻吟刺激| 欧美精品午夜| 亚洲自拍偷拍视频| 麻豆传媒在线完整视频| 欧美日韩亚洲综合一区二区三区| 性の欲びの女javhd| 老司机一区二区三区| 欧美精品在线一区| 深夜av在线| 精品视频一区在线视频| 成年人免费高清视频| 成人一区在线看| 分分操这里只有精品| 国产精品超碰| 国模叶桐国产精品一区| 蜜臀av午夜精品| 亚洲aaa精品| 欧美色图亚洲激情| 性欧美精品高清| 精品国产一区二区三区日日嗨 | 日本在线www| 欧美日韩国产精品自在自线| 精品少妇一区二区三区密爱| 国产综合色在线视频区| 久久视频免费在线| 999久久精品| 777午夜精品福利在线观看| 三级理论午夜在线观看| 一本一道综合狠狠老| 日韩不卡av在线| 国产一区二区在线观看免费| 国产成人亚洲综合无码| 国产精品x8x8一区二区| 日韩av毛片网| 日韩在线免费电影| 欧美大胆一级视频| 丰满少妇乱子伦精品看片| 久久精品一区二区| 日韩av在线中文| 欧美国产综合| 欧美成人在线免费观看| 免费成人高清在线视频| 九九热最新视频//这里只有精品 | 狠狠狠狠狠狠狠| 国产精品久久毛片| 秘密基地免费观看完整版中文| 久久成人亚洲| 男人天堂成人网| 欧美日韩一区二区三区四区不卡| 国产激情999| 亚洲按摩av| 亚洲视频视频在线| 99国产在线播放| 色综合视频一区二区三区高清| 黄色片子在线观看| 2021国产精品久久精品| 亚洲黄色av片| 老妇喷水一区二区三区| 佐佐木明希av| 国产精品一区高清| 成人在线免费观看一区| xxxxxx欧美| 欧美乱大交xxxxx| 久草在线免费福利资源| 欧美va亚洲va香蕉在线| 午夜精品久久久久久久蜜桃| 一区二区在线观看av| 色一情一交一乱一区二区三区| 国产剧情av麻豆香蕉精品| 蜜臀久久99精品久久久酒店新书| 欧美日韩免费| 一级二级三级欧美| 亚洲男人都懂第一日本| 国产成人精品免费视频大全最热| 国产精品麻豆成人av电影艾秋| 久久久综合av| 91网址在线观看| 色综合伊人色综合网站| 日本一卡二卡四卡精品| 精品免费一区二区三区| 亚洲最大成人在线视频| 色婷婷综合久久久中文一区二区| 久久机热这里只有精品| 日韩一区欧美小说| 女女互磨互喷水高潮les呻吟 | 青青青视频在线播放| fc2成人免费人成在线观看播放| 亚洲综合av在线播放| 日本亚洲一区二区| 亚洲午夜精品久久久久久人妖| 欧美色图麻豆| 日本一区二区三区四区五区六区| 日韩精品午夜| 亚洲激情图片| 成人久久综合| 欧洲一区二区在线| 免费观看久久av| 久久伦理网站| 麻豆一区一区三区四区| 国产高清自拍一区| 国产精品45p| 国产一区免费视频| 久久超级碰碰| 精品九九九九| 全国精品免费看| 久久96国产精品久久99软件| 麻豆成人入口| 久久久久天天天天| 日韩在线麻豆| 日本不卡在线播放| 精品久久视频| 亚洲一区二区三区精品动漫| 日韩av专区| 激情图片qvod| 亚洲小说欧美另类社区| 成人免费aaa| 丝袜诱惑制服诱惑色一区在线观看 | 亚洲综合一区二区不卡| 欧美电影在线观看一区| 99国产在线视频| 动漫视频在线一区| 激情小说综合网| 国内精品视频在线观看| 四虎一区二区| 亚洲精品va| 成人免费性视频| 在线观看不卡| 日韩a在线播放| 老司机精品视频导航| 香蕉视频xxxx| 99riav久久精品riav| 久久丫精品忘忧草西安产品| 综合久久国产九一剧情麻豆| 精品无码久久久久| 欧美日韩一区二区免费在线观看| 天天爱天天做天天爽| 欧美区一区二区三区| 亚洲爱爱综合网| 亚洲电影天堂av | 成人综合在线网站| xxxxxx黄色| 欧美国产综合色视频| 日韩一区二区三区四区视频| 亚洲在线免费播放| 亚洲熟妇无码乱子av电影| 欧美日韩在线播放三区| 性色av蜜臀av| 亚洲欧美另类国产| 免费av网站在线看| 国内精品小视频| 国产成人精品一区二区三区视频| 97碰碰视频| 波多野结衣的一区二区三区| 强开小嫩苞一区二区三区网站| 亚洲免费精品| 亚洲欧美在线精品| av网站免费线看精品| 天堂资源在线视频| 亚洲国产成人porn| 成人黄色片在线观看| 精品日韩在线一区| 三区四区电影在线观看| 欧美性一区二区三区| 91麻豆精品国产综合久久久 | gogo高清午夜人体在线| 国产欧美日韩亚洲精品| 欧美美女啪啪| 日本丰满大乳奶| 日韩国产欧美视频| 亚洲麻豆一区二区三区| 亚洲图片激情小说| 亚洲毛片一区二区三区| 精品嫩草影院久久| 国产在线看片| 国产精品福利在线观看| 看全色黄大色大片免费久久久| 亚洲一区高清| 久久久久在线| 偷偷色噜狠狠狠狠的777米奇| 亚洲日本在线天堂| 青娱乐在线免费视频| 日韩极品精品视频免费观看| 色呦呦呦在线观看| 成人精品视频在线| 精品一区电影| 国产成人久久777777| 99久久99久久久精品齐齐| 久久网中文字幕| 日韩你懂的在线观看| 激情在线小视频| 国产精品久久久久高潮| 国产探花一区| 成人在线免费播放视频| 91亚洲国产成人精品一区二三| 久久久无码一区二区三区| 欧美一区二区三区男人的天堂| 欧美18hd| 成人做爰www免费看视频网站| 91视频综合| 青青草原国产在线视频| 欧美高清一级片在线观看| 91青青草视频| 亚洲少妇激情视频| 欧美日韩不卡| 五月天综合网| 久久成人久久爱| 三级黄色录像视频| 欧美日韩成人一区| 日本a级在线| 亚洲一区二区三区乱码aⅴ蜜桃女| 色琪琪久久se色| 亚洲综合123| 一二三四区精品视频| 亚洲国产福利视频| 久久人人爽人人爽人人片av高请| 成人福利一区| 亚洲熟妇av日韩熟妇在线| 99久久亚洲一区二区三区青草| 日韩欧美亚洲一区二区三区| 亚洲精品乱码久久久久久金桔影视 | 天堂在线精品视频| 一区二区三区中文字幕电影| 草逼视频免费看| 国内成人精品一区| 九九久久成人| 九一精品久久久| 亚洲最大成人综合| 爽爽视频在线观看| 国产精品444| 亚洲字幕久久| a天堂视频在线观看| 日本韩国精品一区二区在线观看| 日韩毛片久久久| www日韩av| 久久动漫亚洲| 成人免费毛片xxx| 亚洲黄在线观看| 成人国产网站| 国产精品三级一区二区| 91色视频在线| 一级aaaa毛片| 韩国福利视频一区| 成人在线免费观看91| 红桃视频一区二区三区免费| 高跟丝袜一区二区三区| 免费在线毛片网站| 国产伦精品一区二区三| 免费在线看成人av| 免费中文字幕在线观看| 亚洲图片欧洲图片av| 精品亚洲二区| 成人精品视频一区二区| 亚洲影视在线播放| 在线日本中文字幕| 国产精品一区二区三区在线观| 免费成人你懂的| 日韩精品乱码久久久久久| xxxx性欧美| 精品在线91| 人妻精油按摩bd高清中文字幕| 色综合久久综合网| 青青草视频在线免费直播| 日本在线免费观看一区| 成人爽a毛片一区二区免费| 亚洲视屏在线观看|