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

iOS 17(SwiftUI 5.0)帶來(lái)的圖表(Charts)新類型:“大餅”與“甜甜圈”

這篇具有很好參考價(jià)值的文章主要介紹了iOS 17(SwiftUI 5.0)帶來(lái)的圖表(Charts)新類型:“大餅”與“甜甜圈”。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

iOS 17(SwiftUI 5.0)帶來(lái)的圖表(Charts)新類型:“大餅”與“甜甜圈”

概覽

WWDC 2023 為我們帶來(lái)了 iOS 17,也為我們帶來(lái)了 SwiftUI 5.0。

在 SwiftUI 新版中,Apple 增加了很多重磅功能,也對(duì)原有功能做了大幅度升級(jí)。

對(duì)于 Charts 框架,? 新增了餅圖(Pie)類型并且加入了圖表元素的原生選擇功能。

iOS 17(SwiftUI 5.0)帶來(lái)的圖表(Charts)新類型:“大餅”與“甜甜圈”

在本篇博文中,就讓我們一起來(lái)看看 SwiftUI 5.0 中這些激動(dòng)人心的新功能吧!

Let’s go?。?!??


“大餅"與"甜甜圈”

SwiftUI 5.0 在 4.0 眾多圖表類型基礎(chǔ)之上,增加了全新的 餅圖(Pie) 類型,我們可以通過(guò)它來(lái)更形象的展示圖表數(shù)據(jù)。


注意:本文中的代碼需要 Xcode 15 beta 版才能編譯和運(yùn)行。


下面是 SwiftUI 4.0 Charts 條狀圖的展示:

iOS 17(SwiftUI 5.0)帶來(lái)的圖表(Charts)新類型:“大餅”與“甜甜圈”

代碼如下:

@Model
final class Item {
    var name: String
    var power: Int
    var timestamp: Date
    
    init(name: String, power: Int) {
        self.name = name
        self.power = power
        timestamp = Date.now
    }
}

Chart(items) { item in
    BarMark(x: .value("power", item.power), stacking: .normalized)
        .foregroundStyle(by: .value("name", item.name))
}
.chartLegend(.hidden)

想改為使用新餅圖類型非常簡(jiǎn)單,只需將上面的 BarMark 換為 SectorMark 即可:

SectorMark(angle: .value("power", item.power))

iOS 17(SwiftUI 5.0)帶來(lái)的圖表(Charts)新類型:“大餅”與“甜甜圈”

我們可以調(diào)整每塊“大餅”的空隙大?。╝ngularInset)和圓角的弧度(cornerRadius):

SectorMark(angle: .value("power", item.power),angularInset: 3.0)
    .cornerRadius(10)

iOS 17(SwiftUI 5.0)帶來(lái)的圖表(Charts)新類型:“大餅”與“甜甜圈”

值得注意的是:Charts 中餅圖數(shù)據(jù)改變的動(dòng)畫效果做的也非常生動(dòng),SwiftUI 會(huì)自動(dòng)根據(jù)狀態(tài)的變化來(lái)合成自然的動(dòng)畫,無(wú)需多寫半行代碼。

不過(guò),“大餅”雖好,“甜甜圈”更佳!

小孩子才做選擇,光有“大餅”怎么行,我們連“甜甜圈”也統(tǒng)統(tǒng)都要了??!

實(shí)現(xiàn)“甜甜圈”(餅圖空心)效果也很容易,我們只需調(diào)整 SectorMark 構(gòu)造器中 innerRadius 屬性的值即可:

SectorMark(angle: .value("power", item.power),
           innerRadius: .ratio(innerRadius),
           angularInset: 3.0
)

iOS 17(SwiftUI 5.0)帶來(lái)的圖表(Charts)新類型:“大餅”與“甜甜圈”

好誘人的“甜甜圈”哦,有沒(méi)有想吃的欲望呢???

圖表元素的選中

除了加入新圖表類型以外,SwiftUI 5.0 中 Charts 終于可以支持原生選擇啦!

現(xiàn)在,我們無(wú)需再手動(dòng)計(jì)算是圖表中哪個(gè)元素被選中了,一切回歸簡(jiǎn)潔:

struct LocationDetailsChart: View {
  @Binding var rawSelectedDate: Date?

  var body: some View {
    Chart {
      ForEach(data) { series in
        ForEach(series.sales, id: \.day) { element in
          LineMark(
            x: .value("Day", element.day, unit: .day),
            y: .value("Sales", element.sales)
          )
        }
        .foregroundStyle(by: .value("City", series.city))
        .symbol(by: .value("City", series.city))
        .interpolationMethod(.catmullRom)
      }
    }
    .chartXSelection(value: $rawSelectedDate)
  }
}

如上代碼所示,我們使用 chartXSelection(value:) 修改器方法將當(dāng)前選中的數(shù)據(jù)放入指定的綁定($rawSelectedDate)中。

iOS 17(SwiftUI 5.0)帶來(lái)的圖表(Charts)新類型:“大餅”與“甜甜圈”

除了選擇單個(gè)圖表元素,我們還可以選擇一段范圍內(nèi)的元素集合:

Chart(data) { series in
  ForEach(series.sales, id: \.day) { element in
    LineMark(
      x: .value("Day", element.day, unit: .day),
      y: .value("Sales", element.sales)
    )
  }
  ...
}
.chartXSelection(value: $rawSelectedDate)
.chartXSelection(range: $rawSelectedRange)

iOS 17(SwiftUI 5.0)帶來(lái)的圖表(Charts)新類型:“大餅”與“甜甜圈”

那么問(wèn)題來(lái)了,能不能選中 SwiftUI 5.0 圖表新餅圖類型的“大餅”元素呢?答案是肯定的!

下面是官方視頻中對(duì)應(yīng)的代碼:

Chart(data, id: \.name) { element in
  SectorMark(
    angle: .value("Sales", element.sales),
    innerRadius: .ratio(0.618),
    angularInset: 1.5
  )
  .cornerRadius(5)
  .foregroundStyle(by: .value("Name", element.name))
  .opacity(element.name == selectedName ? 1.0 : 0.3)
}
.chartAngleSelection(value: $selectedAngle)

類似的,? 通過(guò) chartAngleSelection(value:) 修改器方法實(shí)現(xiàn)了餅圖元素的選中:

iOS 17(SwiftUI 5.0)帶來(lái)的圖表(Charts)新類型:“大餅”與“甜甜圈”

不過(guò),單從這段代碼我們還是無(wú)法了解餅圖元素選中的實(shí)現(xiàn)細(xì)節(jié),比如:selectedAngle 是什么?它是如何轉(zhuǎn)換成 selectedName 的呢?

為什么 ? 在此要“猶抱琵琶半遮面”隱藏相關(guān)的細(xì)節(jié)呢?這不禁讓我預(yù)感到它會(huì)是一個(gè)“坑”!

“坑”中的實(shí)現(xiàn)很可能在 iOS 17 正式版中會(huì)有所不同,所以 ? 才會(huì)這樣“遮遮掩掩”。


想要了解更多相關(guān)的內(nèi)容,請(qǐng)移步如下鏈接觀賞:

  • 有用的知識(shí)又增加了:為何無(wú)法編譯某些 ? WWDC 官方視頻中的代碼?

填上 WWDC 23 視頻中的“坑”

WWDC 23 中對(duì)應(yīng)內(nèi)容的官方視頻在下面,想要了解來(lái)龍去脈的小伙伴們可以“肆意”觀賞:

  • Explore pie charts and interactivity in Swift Charts

盡管官方視頻中的代碼對(duì)如何完成餅圖元素選中功能“閃爍其詞”,但我們可以自己發(fā)揮“主觀能動(dòng)性”來(lái)大膽推測(cè)一下它的實(shí)現(xiàn)細(xì)節(jié):即自己搞定“甜甜圈”的選中功能。

首先我們要搞清楚的是, chartAngleSelection 方法參數(shù)中的綁定值到底是個(gè)啥:

public func chartAngleSelection<P>(_ binding: Binding<P?>) -> some View where P : Plottable

我們可以通過(guò)監(jiān)視 angleValue 的值,來(lái)看看它是如何跟隨我們點(diǎn)擊而變化的:

struct ContentView: View {
    // 省略其它狀態(tài)定義...
    @Query private var items: [Item]
    @State private var angleValue: Int?
    
    var body: some View {
        NavigationView {
            List {
                Chart(items) { item in
                    SectorMark(angle: .value("power", item.power),
                               innerRadius: .ratio(innerRadius),
                               angularInset: 3.0
                    )
                    .cornerRadius(10)
                    .foregroundStyle(by: .value("name", item.name))
                }
                .chartLegend(.hidden)
                .chartAngleSelection($angleValue)
                .onChange(of: angleValue){ old,new in
                	// 探查 angleValue 的真正面目...
                    print("new angle value: \(new)")
                }.padding(.vertical, 50)
                
                ForEach(items) { ... }
            }
            .navigationTitle("餅圖演示")
        }
    }
}

iOS 17(SwiftUI 5.0)帶來(lái)的圖表(Charts)新類型:“大餅”與“甜甜圈”

如上圖所示:chartAngleSelection($angleValue) 方法中的綁定是一個(gè)數(shù)量值(定義成浮點(diǎn)數(shù)類型也可以),我們還發(fā)現(xiàn) angleValue 在 0° 位置附近點(diǎn)擊時(shí)值越小,而在 360° 位置點(diǎn)擊時(shí)值越大。

經(jīng)過(guò)驗(yàn)證可得:angleValue 最大值就是 items 中所有元素 power 值的和!據(jù)此,我們可以輕松寫一個(gè)從 angleValue 值找到對(duì)應(yīng)選中 item 的方法:

private func findSltItem() -> Item? {
    guard let slt = angleValue else { return nil }
    
    var sum = 0
    // 若 angleValue 小于第一個(gè) item.power ,則表示選擇的是圖表中首張“大餅”!
    var sltItem = items.first
    for item in items {
        sum += item.power
        // 試探正確選中的餅圖元素
        if sum >= slt {
            sltItem = item
            break
        }
    }
    return sltItem
}

我們現(xiàn)在可以根據(jù)餅圖中當(dāng)前選中的 angleValue 值,輕松找到對(duì)應(yīng)的 Item 了:

struct ContentView: View {
    // 省略其它狀態(tài)定義...
    @Query private var items: [Item]
    @State private var angleValue: Int?
    @State private var sltItem: Item?
    
    var body: some View {
        NavigationView {
            List {
                Chart(items) { item in
                    SectorMark(angle: .value("power", item.power),
                               innerRadius: .ratio(innerRadius),
                               angularInset: 3.0
                    )
                    .cornerRadius(10)
                    .foregroundStyle(by: .value("name", item.name))
                    .opacity(sltItem?.id == item.id ? 1.0 : 0.3)
                }
                .onChange(of: angleValue){ old,new in
                    withAnimation {
                        if let item = findSltItem() {
                            if item == sltItem {
                                // 點(diǎn)擊已被選中的元素時(shí)取消選擇
                                sltItem = nil
                            }else{
                                sltItem = item
                            }
                        }
                    }
                }.padding(.vertical, 50)
                
                ForEach(items) {...}
            }
            .navigationTitle("餅圖演示")
        }
    }
}

效果如下:

iOS 17(SwiftUI 5.0)帶來(lái)的圖表(Charts)新類型:“大餅”與“甜甜圈”

看來(lái)為 ? WWDC 官方代碼填坑的感覺(jué)也很不錯(cuò)哦????

總結(jié)

在本篇博文中,我們介紹了 WWDC 23 最新 SwiftUI 5.0(iOS 17)中關(guān)于圖表的新體驗(yàn),學(xué)習(xí)了如何創(chuàng)建餅圖(Pie)和實(shí)現(xiàn) Charts 元素的選中功能,小伙伴們還不趕快操練起來(lái)!

感謝觀賞,再會(huì)!??文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-476995.html

到了這里,關(guān)于iOS 17(SwiftUI 5.0)帶來(lái)的圖表(Charts)新類型:“大餅”與“甜甜圈”的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • C++ Qt開發(fā):Charts繪制各類圖表詳解

    C++ Qt開發(fā):Charts繪制各類圖表詳解

    Qt 是一個(gè)跨平臺(tái)C++圖形界面開發(fā)庫(kù),利用Qt可以快速開發(fā)跨平臺(tái)窗體應(yīng)用程序,在Qt中我們可以通過(guò)拖拽的方式將不同組件放到指定的位置,實(shí)現(xiàn)圖形化開發(fā)極大的方便了開發(fā)效率,本章將重點(diǎn)介紹 TreeWidget 與 QCharts 的常用方法及靈活運(yùn)用。 在之前的文章中筆者介紹了如何使

    2024年02月04日
    瀏覽(23)
  • 如何在 SwiftUI 中實(shí)現(xiàn)音頻圖表

    如何在 SwiftUI 中實(shí)現(xiàn)音頻圖表

    在可訪問(wèn)性方面,圖表是復(fù)雜的事物之一。iOS 15 引入了一項(xiàng)名為“音頻圖表”的新功能。 下面我們將學(xué)習(xí)如何通過(guò)使用 accessibilityChartDescriptor 視圖修飾符為任何 SwiftUI 視圖構(gòu)建音頻表示,呈現(xiàn)類似自定義條形圖視圖或圖像的圖表。 讓我們從在 SwiftUI 中構(gòu)建一個(gè)簡(jiǎn)單的條形圖

    2024年01月22日
    瀏覽(14)
  • Github每日精選(第87期):輕量級(jí)圖表lightweight-charts

    Github每日精選(第87期):輕量級(jí)圖表lightweight-charts

    lightweight-charts TradingView 輕量級(jí)圖表是最小和最快的金融 HTML5 圖表之一。 如果您想在網(wǎng)頁(yè)上將財(cái)務(wù)數(shù)據(jù)顯示為交互式圖表而不影響網(wǎng)頁(yè)加載速度和性能,輕量級(jí)圖表庫(kù)是您的最佳選擇。 如果您想用交互式圖表替換靜態(tài)圖像圖表,它是您的最佳選擇。該庫(kù)的大小接近靜態(tài)圖像,

    2024年02月05日
    瀏覽(19)
  • web3:使用Docker-compose方式部署blockscout瀏覽器+charts圖表

    最近做的項(xiàng)目,需要blockscout來(lái)部署一個(gè)區(qū)塊鏈瀏覽器,至于blockscout是什么,咱們稍后出一篇文章專門介紹下,本次就先介紹一下如何使用Docker-compose方式部署blockscout,以及過(guò)程中遇到的種種坑

    2024年02月11日
    瀏覽(29)
  • iOS Xcode14 Charts集成時(shí)編譯報(bào)錯(cuò)

    iOS Xcode14 Charts集成時(shí)編譯報(bào)錯(cuò)

    4.1.0解決了這兩個(gè)問(wèn)題 下載4.1.0的demo, 然后手動(dòng)導(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’ 解決方案: 在上面的擴(kuò)展中加上下面的方法 參考

    2024年02月16日
    瀏覽(24)
  • 關(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適配iOS16導(dǎo)航控制器引起的閃退

    當(dāng)時(shí)iPhone14系列手機(jī)升級(jí)到iOS16.5.1系統(tǒng)以后,當(dāng)用戶登錄后再次退出登錄閃退貨登錄后退出登錄閃退。 由于SwiftUI提倡用struct代替類,導(dǎo)致悲劇產(chǎn)生,閃退時(shí)無(wú)法打印是那個(gè)結(jié)構(gòu)體(class類實(shí)現(xiàn)時(shí)會(huì)打印類名),因?yàn)槭莝truct也沒(méi)有deinit跟蹤內(nèi)存是否泄漏。開啟僵尸進(jìn)程打印只有

    2024年02月11日
    瀏覽(19)
  • 如何將自定義字體添加到 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/ 熊貓小賬本 一個(gè)簡(jiǎn)潔的記賬 App,用于記錄日常消費(fèi)開支收入,使用 iCloud 保存同步數(shù)據(jù)。 支持備注,自定義時(shí)間偶爾忘記記賬也沒(méi)關(guān)系。 搜索

    2024年02月13日
    瀏覽(23)
  • SwiftUI 實(shí)現(xiàn)一個(gè) iOS 上 Files App 兼容的文件資源管理器

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

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

    2024年02月10日
    瀏覽(29)
  • SwiftUI 視頻教程之 快速播放本地視頻,URL 播放視頻,自動(dòng)播放視頻,視頻結(jié)束通知VideoPlayer (iOS 14 +)

    SwiftUI 視頻教程之 快速播放本地視頻,URL 播放視頻,自動(dòng)播放視頻,視頻結(jié)束通知VideoPlayer (iOS 14 +)

    iOS 14引入了viewAVKit的世界。顯示實(shí)例的內(nèi)容。在框架內(nèi)部定義,讓我們可以在本地播放視頻,而無(wú)需從.SwiftUIVideoPlayerVideoPlayerAVPlayerViewAVKitSwiftUIUIKit VideoPlayer以 player 作為初始化參數(shù),是 AVPlayer 的一個(gè)實(shí)例。 通過(guò) URL 播放視頻 帶疊加層的視頻播放器 自動(dòng)播放視頻 視頻結(jié)束通

    2024年02月06日
    瀏覽(23)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包