国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

在 iOS 16 中用 SwiftUI Charts 創(chuàng)建一個折線圖

這篇具有很好參考價值的文章主要介紹了在 iOS 16 中用 SwiftUI Charts 創(chuàng)建一個折線圖。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

蘋果在 WWDC 2022 上推出了 SwiftUI 圖表,這使得在 SwiftUI 視圖中創(chuàng)建圖表變得異常簡單。圖表是以豐富的格式呈現(xiàn)可視化數(shù)據(jù)的一種很好的方式,而且易于理解。本文展示了如何用比以前從頭開始創(chuàng)建同樣的折線圖少得多的代碼輕松創(chuàng)建折線圖。此外,自定義圖表的外觀和感覺以及使圖表中的信息易于訪問也是非常容易的。

如以前的文章所示,不使用 SwiftUI Charts 也可以創(chuàng)建一個折線圖。然而,使用 Charts 框架可以提供大量的圖表來探索對應(yīng)用程序中的數(shù)據(jù)最有效的方法,從而使它變得更加容易。

系列文章

  1. 如何在 SwiftUI 中創(chuàng)建條形圖
  2. SwiftUI 中的水平條形圖
  3. 在 iOS 16 中用 SwiftUI Charts 創(chuàng)建一個折線圖
  4. 在 iOS16 中用 SwiftUI 圖表定制一個線圖
  5. 在 Swift 圖表中使用 Foudation 庫中的測量類型

簡單折線圖

從包含一周的步數(shù)的數(shù)據(jù)開始,類似于 在SwiftUI中創(chuàng)建折線圖 中使用的數(shù)據(jù)。定義一個結(jié)構(gòu)來保存日期和該日的步數(shù),并為當(dāng)前周創(chuàng)建一個數(shù)組。

struct StepCount: Identifiable {
    let id = UUID()
    let weekday: Date
    let steps: Int
    
    init(day: String, steps: Int) {
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyyMMdd"
        
        self.weekday = formatter.date(from: day) ?? Date.distantPast
        self.steps = steps
    }
}


let currentWeek: [StepCount] = [
    StepCount(day: "20220717", steps: 4200),
    StepCount(day: "20220718", steps: 15000),
    StepCount(day: "20220719", steps: 2800),
    StepCount(day: "20220720", steps: 10800),
    StepCount(day: "20220721", steps: 5300),
    StepCount(day: "20220722", steps: 10400),
    StepCount(day: "20220723", steps: 4000)
]

要創(chuàng)建一個折線圖,為步數(shù)數(shù)據(jù)中的每個元素創(chuàng)建一個帶有LineMark的圖表。在LineMark的 X 值中指定工作日,在 Y 值中指定步數(shù)。注意,還需要導(dǎo)入Charts框架。

這就為步數(shù)數(shù)據(jù)創(chuàng)建了一個線形圖。由于只有一個系列的數(shù)據(jù),ForEach 可以省略,數(shù)據(jù)可以直接傳遞給 Chart 初始化器。兩個部分都產(chǎn)生相同的折線圖。

import SwiftUI
import Charts

struct LineChart1: View {
    var body: some View {
        VStack {
            GroupBox ( "Line Chart - Step Count") {
                Chart {
                    ForEach(currentWeek) {
                        LineMark(
                            x: .value("Week Day", $0.weekday, unit: .day),
                            y: .value("Step Count", $0.steps)
                        )
                    }
                }
            }
            
            GroupBox ( "Line Chart - Step Count") {
                Chart(currentWeek) {
                    LineMark(
                        x: .value("Week Day", $0.weekday, unit: .day),
                        y: .value("Step Count", $0.steps)
                    )
                    
                }
            }
        }
    }
}

在 iOS 16 中用 SwiftUI Charts 創(chuàng)建一個折線圖

使用 SwiftUI Charts 創(chuàng)建的折線圖顯示每日步數(shù)

其他圖表

SwiftUI Charts 有許多可用的圖表選項。這些可以通過將圖表標(biāo)記從LineMark改為其他類型的標(biāo)記(如BarMark)來生成條形圖。

struct OtherCharts: View {
    var body: some View {
        VStack {
            GroupBox ( "Line Chart - Step count") {
                Chart(currentWeek) {
                    LineMark(
                        x: .value("Week Day", $0.weekday, unit: .day),
                        y: .value("Step Count", $0.steps)
                    )
                }
            }
            
            GroupBox ( "Bar Chart - Step count") {
                Chart(currentWeek) {
                    BarMark(
                        x: .value("Week Day", $0.weekday, unit: .day),
                        y: .value("Step Count", $0.steps)
                    )
                }
            }
            
            GroupBox ( "Point Chart - Step count") {
                Chart(currentWeek) {
                    PointMark(
                        x: .value("Week Day", $0.weekday, unit: .day),
                        y: .value("Step Count", $0.steps)
                    )
                }
            }
            
            GroupBox ( "Rectangle Chart - Step count") {
                Chart(currentWeek) {
                    RectangleMark(
                        x: .value("Week Day", $0.weekday, unit: .day),
                        y: .value("Step Count", $0.steps)
                    )
                }
            }
            
            GroupBox ( "Area Chart - Step count") {
                Chart(currentWeek) {
                    AreaMark(
                        x: .value("Week Day", $0.weekday, unit: .day),
                        y: .value("Step Count", $0.steps)
                    )
                }
            }
        }
    }
}

在 iOS 16 中用 SwiftUI Charts 創(chuàng)建一個折線圖

使用 SwiftUI 圖表創(chuàng)建的其他圖表類型,顯示每日步數(shù)

讓折線圖增加可訪問性

將圖表植入 SwiftUI 的一個好處是,可以很容易地使用 可訪問性修飾符 使圖表變得可訪問。為 StepCount 添加一個計算屬性,將數(shù)據(jù)返回為一個字符串,可由 accessibilityLabel 使用。然后為圖表中的每個標(biāo)記添加可訪問性標(biāo)簽和值。

struct StepCount: Identifiable {
    let id = UUID()
    let weekday: Date
    let steps: Int
    
    init(day: String, steps: Int) {
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyyMMdd"
        
        self.weekday = formatter.date(from: day) ?? Date.distantPast
        self.steps = steps
    }
    
    var weekdayString: String {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyyMMdd"
        dateFormatter.dateStyle = .long
        dateFormatter.timeStyle = .none
        dateFormatter.locale = Locale(identifier: "en_US")
        return  dateFormatter.string(from: weekday)
    }
}
    GroupBox ( "Line Chart - Daily Step Count") {
        Chart(currentWeek) {
            LineMark(
                x: .value("Week Day", $0.weekday, unit: .day),
                y: .value("Step Count", $0.steps)
            )
            .accessibilityLabel($0.weekdayString)
            .accessibilityValue("\($0.steps) Steps")
        }
    }

在 iOS 16 中用 SwiftUI Charts 創(chuàng)建一個折線圖

在 SwiftUI 圖表中使折線圖可訪問性

為折線圖添加多個數(shù)據(jù)序列

折線圖是比較兩個不同系列數(shù)據(jù)的好方法。創(chuàng)建第二個系列,即前一周的步數(shù),并將這兩個系列添加到折線圖中。

let previousWeek: [StepCount] = [
    StepCount(day: "20220710", steps: 15800),
    StepCount(day: "20220711", steps: 7300),
    StepCount(day: "20220712", steps: 8200),
    StepCount(day: "20220713", steps: 25600),
    StepCount(day: "20220714", steps: 16100),
    StepCount(day: "20220715", steps: 16500),
    StepCount(day: "20220716", steps: 3200)
]

let currentWeek: [StepCount] = [
    StepCount(day: "20220717", steps: 4200),
    StepCount(day: "20220718", steps: 15000),
    StepCount(day: "20220719", steps: 2800),
    StepCount(day: "20220720", steps: 10800),
    StepCount(day: "20220721", steps: 5300),
    StepCount(day: "20220722", steps: 10400),
    StepCount(day: "20220723", steps: 4000)
]

let stepData = [
    (period: "Current Week", data: currentWeek),
    (period: "Previous Week", data: previousWeek)
]

第一次嘗試添加這兩個系列的數(shù)據(jù)沒有按預(yù)期顯示。

struct LineChart2: View {
    var body: some View {
        GroupBox ( "Line Chart - Daily Step Count") {
            Chart {
                ForEach(stepData, id: \.period) {
                    ForEach($0.data) {
                        LineMark(
                            x: .value("Week Day", $0.weekday, unit: .day),
                            y: .value("Step Count", $0.steps)
                        )
                        .accessibilityLabel($0.weekdayString)
                        .accessibilityValue("\($0.steps) Steps")
                    }
                }
            }
        }
    }
}

在 iOS 16 中用 SwiftUI Charts 創(chuàng)建一個折線圖

第一次嘗試在 SwiftUI Charts 中創(chuàng)建一個包含兩個系列步數(shù)數(shù)據(jù)的折線圖

顯示步數(shù)系列

在折線圖中顯示多個基于工作日的步數(shù)系列

最初嘗試在折線圖中顯示多組數(shù)據(jù)的問題是X軸使用了日期。當(dāng)前的周數(shù)緊接著上一周,所以每一個點都是沿著X軸線性遞增繪制的。

有必要只用工作日作為X軸的數(shù)值,這樣所有的周日都在同一個X坐標(biāo)上繪制。

StepCount中添加另一個計算屬性,以便以字符串格式返回工作日的短日。

struct StepCount: Identifiable {

    . . .
    
        
    var shortDay: String {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "EEE"
        return  dateFormatter.string(from: weekday)
    }
}

shortDay 用于圖表中 LineMarks 的 x 值。另外,前景的樣式設(shè)置為基于stepCount數(shù)組的周期。折線圖使用 x 軸的工作日來顯示兩周的步數(shù),以便在周之間進行比較。

struct LineChart3: View {
    var body: some View {
        VStack {
            GroupBox ( "Line Chart - Daily Step Count") {
                Chart {
                    ForEach(stepData, id: \.period) { steps in
                        ForEach(steps.data) {
                            LineMark(
                                x: .value("Week Day", $0.shortDay),
                                y: .value("Step Count", $0.steps)
                            )
                            .foregroundStyle(by: .value("Week", steps.period))
                            .accessibilityLabel($0.weekdayString)
                            .accessibilityValue("\($0.steps) Steps")
                        }
                    }
                }
                .frame(height:400)
            }
            .padding()

            Spacer()
        }
    }
}

在 iOS 16 中用 SwiftUI Charts 創(chuàng)建一個折線圖

SwiftUI 圖表中帶有兩個系列的步數(shù)數(shù)據(jù)的折線圖

結(jié)論

在 SwiftUI Charts 中還有很多東西可以探索。使用這個框架顯然比從頭開始建立你自己的圖表要好。文章來源地址http://www.zghlxwxcb.cn/news/detail-427520.html

到了這里,關(guān)于在 iOS 16 中用 SwiftUI Charts 創(chuàng)建一個折線圖的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Echarts折線圖中數(shù)據(jù)根據(jù)正負數(shù)顯示不同區(qū)域背景色-配置

    Echarts折線圖中數(shù)據(jù)根據(jù)正負數(shù)顯示不同區(qū)域背景色-配置

    ? Echarts折線圖中數(shù)據(jù)根據(jù)正負數(shù)顯示不同區(qū)域背景色? ?Piecewise 分段類型 Continuous 連續(xù)類型

    2024年01月19日
    瀏覽(44)
  • SwiftUI 實現(xiàn)一個 iOS 上 Files App 兼容的文件資源管理器

    SwiftUI 實現(xiàn)一個 iOS 上 Files App 兼容的文件資源管理器

    在 SwiftUI 中自己白手起家寫一個 iOS(或iPadOS)上迷你的文件資源管理器是有些難度滴,不過從 iOS 11 (2017年) ?官方引入自家的 Files App 之后,我們就可以借助它的魔力輕松完成這一個功能了。 如上所示,我們使用 SwiftUI 原生功能完成了一個小巧的 iOS Files App 文件管理器,

    2024年02月10日
    瀏覽(29)
  • iOS 圖表框架 Charts

    iOS 圖表框架 Charts

    Charts - github iOS-Charts看這個就夠了 - 稀土掘金 4.1.2 用條形圖展示睡眠 要實現(xiàn)上面的效果 上面的代碼實現(xiàn)的效果如下圖 參考博客: iOS Charts庫的簡單使用 - BarChartView Swift - 第三方圖表庫Charts使用詳解8(折線圖7:事件響應(yīng)、MarkerView標(biāo)簽) 參考博客: iOS Charts庫的簡單使用 - P

    2024年02月06日
    瀏覽(26)
  • iOS Xcode14 Charts集成時編譯報錯

    iOS Xcode14 Charts集成時編譯報錯

    4.1.0解決了這兩個問題 下載4.1.0的demo, 然后手動導(dǎo)入Charts Type ‘ChartDataSet’ does not conform to protocol ‘RangeReplaceableCollection’ Unavailable instance method ‘replaceSubrange(_:with:)’ was used to satisfy a requirement of protocol ‘RangeReplaceableCollection’ 解決方案: 在上面的擴展中加上下面的方法 參考

    2024年02月16日
    瀏覽(24)
  • Helm-從0手動創(chuàng)建charts

    創(chuàng)建 chart 目錄結(jié)構(gòu): 創(chuàng)建 Chart.yaml : 創(chuàng)建 templates 目錄: 創(chuàng)建 deployment.yaml: 以上完成后就可以使用 helm 部署,部署名為 my-nginx 的應(yīng)用: 查看創(chuàng)建的應(yīng)用: 查看創(chuàng)建的實際資源: 繼續(xù)創(chuàng)建 service.yaml: 創(chuàng)建 values.yaml: 修改 deployment.yaml,注入變量,改為模板形式: 修改

    2024年02月16日
    瀏覽(14)
  • 使用swift創(chuàng)建第一個ios程序

    使用swift創(chuàng)建第一個ios程序

    一、安裝xcode 先到app store中下載一個Xcode app 二、創(chuàng)建項目 1、項目設(shè)定 創(chuàng)建ios app 2、工程結(jié)構(gòu) 三、修改代碼實現(xiàn)按鍵聯(lián)動 四、運行測試

    2024年01月17日
    瀏覽(23)
  • 關(guān)于iOS:如何使用SwiftUI調(diào)整圖片大小?

    關(guān)于iOS:如何使用SwiftUI調(diào)整圖片大???

    我在Assets.xcassets中擁有很大的形象。 如何使用SwiftUI調(diào)整圖像大小以縮小圖像? 我試圖設(shè)置框架,但不起作用: 1 2 Image(room.thumbnailImage) ? ? .frame(width: 32.0, height: 32.0) 在Image上應(yīng)用任何大小修改之前,應(yīng)使用.resizable()。 1 2 Image(room.thumbnailImage).resizable() .frame(width: 32.0, height: 3

    2024年02月05日
    瀏覽(19)
  • SwiftUI 5.0(iOS 17)TipKit 讓用戶更懂你的 App

    SwiftUI 5.0(iOS 17)TipKit 讓用戶更懂你的 App

    作為我們禿頭開發(fā)者來說,寫出一款創(chuàng)意炸裂的 App 還不足以吸引用戶眼球,更重要的是如何讓用戶用最短的時間掌握我們 App 的使用技巧。 從 iOS 17 開始,? 推出了全新的 TipKit 框架專注于此事。有了它,我們再也不用自己寫 App 用戶幫助以及使用指南的邏輯和界面了。 使用

    2024年02月09日
    瀏覽(45)
  • 如何將自定義字體添加到 iOS 應(yīng)用程序(SwiftUI + 得意黑)

    如何將自定義字體添加到 iOS 應(yīng)用程序(SwiftUI + 得意黑)

    Xcode Version 14.3 (14E222b) SwiftUI 得意黑 Smiley Sans https://github.com/atelier-anchor/smiley-sans/releases https://sarunw.com/posts/how-to-add-custom-fonts-to-ios-app/ 熊貓小賬本 一個簡潔的記賬 App,用于記錄日常消費開支收入,使用 iCloud 保存同步數(shù)據(jù)。 支持備注,自定義時間偶爾忘記記賬也沒關(guān)系。 搜索

    2024年02月13日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包