WWDC 25 風云再起:SwiftUI 7 Charts 心法從 2D 到 3D 的華麗蛻變

在這里插入圖片描述

概述

在 iOS 開發這個波譎云詭的江湖中,SwiftUI 可謂是一位后起之秀,以其簡潔明快的招式迅速在 UI 框架領域中嶄露頭角。

在這里插入圖片描述

而其中的 Charts 框架,更是如同江湖中的 “數據可視化寶典”那樣,讓各位禿頭少俠們能夠輕松將復雜的數據轉化為直觀易懂的圖表。

在本篇武學秘籍中,您將學到如下內容:

    • 概述
    • 1. 江湖起源——原有 Charts 框架的武學修煉
    • 2. 江湖變革——SwiftUI Charts 3D 圖表來襲
    • 3. 輕功飛行——SurfacePlot 打造夢幻曲面圖
    • 4. 握劍訣——交互與視角
    • 5. 3D 圖表修煉的注意事項
      • 5.1 避免數據過載
      • 5.2 謹慎選擇圖表類型
      • 5.3 性能優化不容忽視
    • 6. 尾聲:3D 圖表開啟數據可視化新紀元

那還等什么呢?各位初入江湖的豪客和“大蝦”們,請隨老夫一起進入圖表的美妙世界吧!Let’s go!!!😉


1. 江湖起源——原有 Charts 框架的武學修煉

何曾幾時,WWDC 2020(SwiftUI 4.0,iOS 16)江湖風起云涌,數不清的英雄豪杰和兵器紛繁復雜,數據可視化在其中占據了舉足輕重的地位。

而正是在這樣的背景下,SwiftUI 的 Charts 框架橫空出世,猶如一位初出茅廬的少年劍客,雖然招式簡單,卻也靈活迅捷,迅速得到了武林各大門派的認可。

在這里插入圖片描述

初入江湖的菜鳥俠客們可以通過它迅速繪制出柱狀圖、折線圖和餅狀圖等基礎武學,簡單易懂,入門容易。記得那年,當 18 歲的列位禿頭少俠們在代碼中添加 Chart 時,心中便涌起一股非凡的成就感,仿佛寶子們也成為了數據江湖中的一員。

如下便是一個簡單的柱狀圖的代碼示例,猶如初入武林的少年,憑借一把利劍便能出奇制勝:

import SwiftUI
import Chartsstruct SimpleBarChart: View {let data: [Double] = [2, 3, 5, 7, 11, 13]var body: some View {Chart(data) { value inBarMark(x: .value("Value", value))}.chartXAxis {AxisMarks()}}
}

這就是“基本劍法”,以簡潔利落見長,正如初出茅廬的劍客,剛剛踏入這個江湖那樣的飄逸灑脫:

在這里插入圖片描述

隨著修煉的深入,少俠們會逐漸意識到,這種圖表只能為大家在江湖中打下些許基礎,但它也暴露出了一些不足。

在這里插入圖片描述

雖然二十步之內,便可知敵人風吹草動,然而一旦對手修煉到更高的境界,單靠這種平凡的武學便顯得不足以應對復雜的數據紛爭。

2. 江湖變革——SwiftUI Charts 3D 圖表來襲

誰能想象,江湖中的一場風云變幻,竟會讓 Charts 框架煥發新生。

在WWDC 25 上,蘋果總舵主為這門熟悉的武功奧義又注入了新的活力,推出了 Chart3D。這不再是尋常的劍法,而是進入了三維的殿堂。就像一位絕世大俠,早已超越了平面世界的束縛,開始在三維空間中閃展騰挪。

在這里插入圖片描述

這時的 Chart3D,猶如一位有了深厚內力的高手,能在三維空間中揮灑自如。寶子們不再僅僅是直線和曲線的過客,而是能在空間中將數據點、曲面、視角交織成一幅立體圖景。

無論是點的組合,還是面的鋪展,或是交互的旋轉,每一處都透露著數據與現實世界的緊密聯系。

快看這段代碼,仿佛是大俠抬手之間,便可將復雜的數據織入眼前的三維世界那樣暢快淋漓:

struct ContentView: View {let data = [(2,5), (3,7), (5,11), (7,8), (11,20), (13,10)]var body: some View {NavigationStack {Chart3D(data.indices, id: \.self) { index inlet item = data[index]PointMark(x: .value("X", item.0),y: .value("Y", item.1),z: .value("Z", index)).foregroundStyle(.red.gradient)}.chartXAxisLabel("X軸").chartYAxisLabel("Y軸").chartZAxisLabel("Z軸").navigationTitle("Charts 心法展示")}}
}

此時,數據不僅停留在紙面上,而是躍然于三維空間之中,猶如劍客揮舞長劍,刺破蒼穹:

在這里插入圖片描述

現在,列為微禿小少俠們可以隨心所欲地操控每一個數據點的位置,仿佛掌握了整個空間的節奏,就問你們贊不贊呢?

3. 輕功飛行——SurfacePlot 打造夢幻曲面圖

在武林中,總有一些高手以輕盈如風的身法著稱,他們步伐矯健,時隱時現。而 SurfacePlot 就如同這般,能夠以平滑的曲面將兩個變量之間的關系展現得淋漓盡致。

在這里插入圖片描述

它能讓小伙伴們不再拘泥于線條和點,而是化繁為簡,把復雜的數據關系化作一張優美的曲面,輕盈地在三維空間中隨意漂浮。

如果寶子們想描繪一條像“乾坤大挪移”般自由流暢的曲線,那便可以借助 SurfacePlot 來用數學函數得償所愿。

下面的代碼猶如一套行云流水的劍法,將數學的深奧與圖形的簡潔相結合,點滴之間盡顯工藝之精妙:

import SwiftUI
import Chartsstruct SurfacePlotChart: View {var body: some View {NavigationStack {Chart3D {SurfacePlot(x: "X", y: "Y", z: "Z") { x, z inlet h = hypot(x, z)return sin(h) / h * 2}.foregroundStyle(.heightBased)}.chartXScale(domain: -10...10).chartZScale(domain: -10...10).chartYScale(domain: -0.23...10).navigationTitle("Chart3D 心法傳功")}}
}

這就像是武林中的一招“飛燕回旋”,優雅、流暢,同時又極具威力:

在這里插入圖片描述

當各位微禿俠客們把數學函數轉化為三維曲面,它就不再只是抽象的公式,而是化身為一場精彩的武林爭斗,令人嘆為觀止。

4. 握劍訣——交互與視角

然而,江湖變幻莫測,如何在紛繁復雜的數據中保持清醒的視角,便成為了每個劍客面臨的嚴峻挑戰。

Chart3D 的強大之處不僅僅在于它能夠描繪出三維的世界,更在于它提供了豐富的交互功能,能夠根據需要調整視角,讓寶子們從不同角度觀看同一數據的圖表,仿佛隨時可以恣意改變劍法招式那般美妙。

在這里插入圖片描述

以下代碼示范了如何通過手勢控制圖表的旋轉角度,并且設置初始的視角與相機投影,這種靈活性猶如大俠揮劍的自由度,讓小伙伴們在數據的世界里遨游無礙:

struct ContentView: View {@State var data = [(Int,Int)]()private func createData() {for _ in 0...99 {let x = Int.random(in: 0...100)let y = Int.random(in: 0...100)data.append((x, y))}}@State private var pose = Chart3DPose(azimuth: .degrees(20),    // 水平角度inclination: .degrees(15) // 垂直角度)var body: some View {NavigationStack {Chart3D(data.indices, id: \.self) { index inlet item = data[index]PointMark(x: .value("X", item.0),y: .value("Y", item.1),z: .value("Z", index)).foregroundStyle(.red.gradient)}.task {createData()}.chartXAxisLabel("X軸").chartYAxisLabel("Y軸").chartZAxisLabel("Z軸").chart3DPose($pose).navigationTitle("Charts 心法展示")}}
}

寶子們可以像大俠操控劍氣那般,調整圖表的角度與視野,每一次變化,都能帶來全新的觀感與體驗:

在這里插入圖片描述

同樣我們略施小計,之前的曲面圖也可以如法炮制:

在這里插入圖片描述

從此,數據的世界也因此變得不再單調,而是充滿了無限可能。

5. 3D 圖表修煉的注意事項

5.1 避免數據過載

雖然 3D 圖表能夠展示豐富的數據信息,但在使用時也要注意避免數據過載。過多的數據點或過于復雜的數據維度,會讓圖表變得混亂不堪,就像武林高手在戰斗中面對過多的敵人,反而會陷入困境。開發者需要對數據進行篩選和精簡,突出重點,確保圖表清晰可讀性。

5.2 謹慎選擇圖表類型

不同的圖表類型適用于不同的數據展示場景,在使用 3D 圖表時,要根據數據的特點和分析目的,謹慎選擇合適的圖表樣式。

例如,3D 柱狀圖適合用于對比數據,3D 散點圖適合分析數據之間的關系,而 3D 餅圖則不太適合這些場景,因為在三維空間中,餅圖的角度和比例可能會讓人產生視覺誤解。

選擇合適的圖表類型,就像武林高手選擇了合適的兵器,才能發揮出最大威力。

5.3 性能優化不容忽視

由于 3D 圖表的渲染和計算量較大,容易對應用的性能產生影響。因此,在開發過程中,要注重性能優化。

可以采用異步加載數據、使用高效的數據結構和算法、合理利用緩存等方法,確保圖表的加載和交互絲一般流暢順滑,不給用戶帶來卡頓體驗。否則,就像內力不足的武林高手,招式施展起來也會大打折扣。

6. 尾聲:3D 圖表開啟數據可視化新紀元

從最初的 2D 圖表到如今的 3D 圖表,SwiftUI 7 的 Charts 框架在數據可視化的江湖中不斷進化,為開發者們提供了越來越強大的工具。

3D 圖表的出現,不僅讓數據可視化變得更加生動、直觀,也為武林高手們開辟了一片全新的江湖。

在這里,寶子們可以憑借自己的智慧和技藝,運用 3D 圖表這一絕世神功,將數據的魅力展現得淋漓盡致,為用戶帶來前所未有的數據探索體驗。

在這里插入圖片描述

在未來的 iOS 開發江湖中,3D 圖表必將成為開發者們手中的一把利器,助力他們在數據可視化領域中披荊斬棘,創造出更多令人驚嘆的應用。而每一位開發者,都將在這個充滿機遇與挑戰的江湖中,書寫屬于自己的傳奇故事。讓我們懷揣著對技術的熱愛和追求,勇敢地踏入這片新江湖,探索 3D 圖表的無限未來吧!

此時,數據的江湖,已經不再是一個簡單的平面,而是充滿了三維空間的無限元宇宙,正如你們已然成為了這片江湖中舉世無雙的大俠一樣,棒棒噠!

那么,感謝各位少俠的觀賞!再會啦!😎

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/913809.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/913809.shtml
英文地址,請注明出處:http://en.pswp.cn/news/913809.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vue+Element Plus 中按回車刷新頁面問題排查與解決

VueElement Plus 中按回車刷新頁面問題排查與解決原因分析解決方案方法一:阻止默認行為 submit.prevent方法二:只監聽回車并觸發搜索最終推薦寫法如下:在使用 Vue 3 Element Plus 開發后臺系統時,我們常常會通過 搭配 實現搜索功…

x86匯編語言入門基礎(三)匯編指令篇3 位移運算

位移運算指令:SHL邏輯移位,SAR算術移位, ROR循環右移 1. SHL 邏輯移位 Shift Left, SHL代表向左移位,SHR代表向右移位 指令格式:shl op1, op2 目的操作數 op1:寄存器/內存地址源操作數 op2:寄…

Java-69 深入淺出 RPC 單體架構 垂直架構 分布式架構 微服務架構

點一下關注吧!!!非常感謝!!持續更新!!! 🚀 AI篇持續更新中!(長期更新) AI煉丹日志-29 - 字節跳動 DeerFlow 深度研究框斜體樣式架 私有…

Android 如何阻止應用自升級

問題背景 1.打開PlayStore,然后登陸賬戶 2.退出應用過幾分鐘后,應用會自動更新到新版本 3.再次打開應用,問題即可復現 一聯網進入playStore應用并且登錄谷歌賬號,退出幾分鐘,在進入,發現應用版本號更新了,應用進行了自我升級,關鍵是升級之后谷歌商店就用不了了,就…

Docker-構建鏡像并實現LNMP架構

一、搭建LNMP基礎配置1、制作Nginx鏡像制作dockerfilevim dockerfileFROM centos:7 RUN rm -rf /etc/yum.repos.d/* RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo RUN yum clean all RUN yum makecache RUN yum -y install z…

Python之--基本知識

基本輸出語法結構: print(輸出內容)print()函數完整的語法格出: print (value,...,sep,end\n,fileNone)只有字符串可以用連接基本輸入語法結構: xinput(提示文字’)注意事項: 無論輸入的數據是什么 x 的數據類型都是字符串類型示例:name input("Enter your na…

VS CodeC51 單片機開發環境搭建

文章目錄前言1.安裝插件2.創建EIDE項目(51單片機)3.配置工具鏈(第一次使用需要配置)4.編譯與下載5.項目文件簡介與串口調試工具6.推薦插件7.打包模板與導出模板8.51單片機串口無法識別問題前言 需要安裝keil c51版本需要配置好C/…

國密算法(SM2/SM3/SM4)

文章目錄國密算法(SM2/SM3/SM4)詳解:從性能對比到Java手機號安全處理實戰一、 國密核心算法簡介二、 性能深度對比三、 Java實戰:手機號的安全處理方案一:使用SM3哈希存儲(推薦用于驗證場景)方案…

從前端轉go開發的學習路線

從前端開發轉向 Go(Golang)后端開發,是一個非常可行也很實用的方向,特別是在做 高性能微服務、分布式系統、云原生(如Kubernetes) 等方面。以下是一份適合你(有多年開發經驗的前端開發者&#x…

node或瀏覽器上傳文件到阿里云OSS

阿里云配置 進入阿里云OSS Bucket 列表的某個 Bucket 倉庫下,點擊訪問控制 RAM 創建用戶 勾上 創建 AccessKey ID 和 AccessKey Secret 復制 AccessKey 信息 用文檔保存 創建角色 選擇云賬號 復制 ARN 用文檔保存,然后 新增權限 搜索 oss 選擇 AliyunOSS…

26考研物理復試面試常見問答問題匯總,物理專業保研推免夏令營面試問題匯總,物理本科知識專業面試最全攻略!

還在為物理考研復試面試發愁?還在為物理招聘的專業面試抓狂?還在為即將到來的物理夏令營面試不知從何下手、翻遍了厚厚的教材卻抓不住重點?別慌,接下來我會從「考研的物理復試經歷」「物理面試攻略」「物理面試基礎問答題匯總很全…

(5)機器學習小白入門 YOLOv:數據需求與圖像不足應對策略

(1)機器學習小白入門YOLOv :從概念到實踐 (2)機器學習小白入門 YOLOv:從模塊優化到工程部署 (3)機器學習小白入門 YOLOv: 解鎖圖片分類新技能 (4)機器學習小白入門YOLOv :圖片標注實操手冊 (5)機器學習小白入門 YOLOv:…

百年制造名企,三菱重工引領“智”造新范式

日前,由深圳軟件協會指導、法大大和信息俠聯合出品的《制造行業合同數智化升級白皮書》(以下簡稱“白皮書”)正式發布,并首次提出 “電子簽法律AI” 雙輪驅動模型。在制造行業面臨供應鏈協同、合規風控及全球化出海等多重挑戰的當…

【學習筆記】計算機操作系統(七)—— 文件管理

第七章 文件管理 文章目錄第七章 文件管理7.1 文件和文件系統7.1.1 數據項、記錄和文件7.1.2 文件名和類型7.1.3 文件系統的層次結構7.1.4 文件操作7.2 文件的邏輯結構7.2.1 文件邏輯結構的類型7.2.2 順序文件(Sequential File)7.2.3 記錄尋址7.2.4 索引文件(Index File)7.2.5 …

基于PyQt5與深度學習的可視化水果識別系統(集成CNN, MobileNetV2, VGG16)

一、項目概述 大家好!今天我將分享一個我近期完成的深度學習項目——一個功能強大的、帶圖形化界面(GUI)的水果識別系統。該系統不僅能識別靜態圖片中的水果,還集成了模型訓練、評估、數據增強等功能于一體,為深度學習…

k8s-服務發布基礎

目錄 Service的定義 核心定義 Service 的類型 關鍵組件與機制 工作流程示例 高級特性 Service工作原理 核心工作原理 標簽選擇器(Label Selector) Endpoints 對象 網絡代理與負載均衡(kube-proxy) userspace 模式&#…

洛谷P1514 [NOIP 2010 提高組] 引水入城

洛谷P1514 [NOIP 2010 提高組] 引水入城 洛谷題目傳送門 題目背景 NOIP2010 提高組 T4 題目描述 在一個遙遠的國度,一側是風景秀美的湖泊,另一側則是漫無邊際的沙漠。該國的行政區劃十分特殊,剛好構成一個 NNN 行 MMM 列的矩形&#xff…

【unity小技巧】國內Unity6下載安裝和一些Unity6新功能使用介紹

文章目錄前言一、安裝1、國外下載2、國內下載二、常用的新功能變化1、官方推薦使用inputsystem進行輸入控制2、修復了InputSystem命名錯誤導致listen被遮擋的bug3、自帶去除unity啟動畫面logo功能4、unity官方的behavior行為樹插件5、linearVelocity代替過時的velocity方法6、隨…

Rust 中字符串類型區別解析

在 Rust 中,"hello" 和 String::from("hello") 都表示字符串,但它們在內存表示、所有權和可變性上有本質區別:1. 類型與內存表示"hello" (字符串字面量):類型為 &str(字符串切片引用…

springMVC05-異常處理器

在 SpringMVC 中,異常處理是一個非常重要的功能,它可以讓你優雅地處理程序拋出的各種異常,向用戶展示友好的提示,而不是顯示一堆報錯信息(如 500 頁面)。一、SpringMVC的異常處理器返回的是ModelAndView&am…