成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在 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報警通知監控圖表

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效果

2022-11-11 09:01:08

SwiftUI條形圖子視圖

2017-12-12 08:20:54

圖表視覺暗示可視化

2024-07-03 09:13:26

SwiftUI修飾符框架

2021-10-26 10:28:41

開發架構Kubernetes

2009-07-02 09:25:41

JSP實現頁面跳轉

2011-06-13 17:46:07

Qt 串口通信

2022-01-09 15:00:16

LinuxAudacity聲音編輯器

2009-12-28 17:33:19

WPF視頻音頻

2022-01-17 09:22:42

SwiftUI App Store開源

2009-03-13 13:58:10

Javascript哈希表偽哈希表
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久草视频 | 日韩欧美一区二区三区免费观看 | 日韩精品在线网站 | 久久伊人一区二区 | a毛片| 欧美日韩国产精品一区二区 | 午夜影院在线观看免费 | 毛片网站在线观看 | 精品亚洲一区二区 | 精品欧美一区二区三区久久久 | 国产精品美女久久久久久免费 | 日韩色视频| 天堂一区二区三区 | 国产精品久久久久国产a级 欧美日韩国产免费 | 久久成人一区 | 99久热在线精品视频观看 | 国产一区二区三区四区在线观看 | 国产不卡在线播放 | 欧美性网站 | 91成人在线视频 | 欧美精品综合在线 | 91精品国产一区二区三区 | 一级做a爰片久久毛片免费看 | 中文字幕成人av | 国产麻豆乱码精品一区二区三区 | 麻豆av一区二区三区久久 | 二区在线视频 | 亚洲成人免费视频 | аⅴ资源新版在线天堂 | 国产伦一区二区三区 | 美女天堂在线 | 一级黄色毛片免费 | 中文字幕成人在线 | 天天干天天爱天天操 | 精品国产乱码一区二区三区a | 亚洲精品www久久久久久广东 | 久久草视频 | 精品一区二区久久 | 欧美福利| www.99热| 免费看a |