DGCharts多平台开发:一套代码如何支持iOS、tvOS与macOS三大平台
【免费下载链接】ChartsBeautiful charts for iOS/tvOS/OSX! The Apple side of the crossplatform MPAndroidChart.项目地址: https://gitcode.com/gh_mirrors/cha/Charts
DGCharts 是一款跨平台的 Swift 图表库,一套代码即可同时支持iOS、tvOS 与 macOS三大平台。它源自跨平台项目 MPAndroidChart 的 Apple 版本,提供折线图、柱状图、饼图、雷达图、蜡烛图等 8 种图表类型,让开发者只需学习一次 API,就能在手机、电视和 Mac 上渲染出一致且美观的数据可视化效果。
为什么需要多平台图表库?
📱 同一款数据应用,往往需要同时覆盖 iPhone、Apple TV 和 Mac 三个场景。如果每个平台各写一套绘图代码,不仅开发量翻倍,交互体验也会各不相同。
DGCharts 的价值在于:
- 学习曲线只走一次:数据模型、配置项在三个平台间高度一致,甚至与 Android 端的 MPAndroidChart 也保持同步
- 一份数据逻辑,三端复用:构建 ChartData 的核心代码基本可以原样搬到不同平台
- 平台差异被抽象层消化:底层 UIKit / AppKit 的差异由库内部处理,使用者几乎无感
核心原理:Platform 抽象层如何抹平平台差异
三大平台最大的区别在于:iOS/tvOS 使用UIKit,macOS 使用AppKit。DGCharts 的解法是在 Platform.swift 中建立一个"NSUI*" 别名层:
| 抽象类型 | iOS / tvOS | macOS |
|---|---|---|
| NSUIView | UIView | NSView |
| NSUIImage | UIImage | NSImage |
| NSUIScrollView | UIScrollView | NSScrollView |
| NSUIDisplayLink | CADisplayLink | 60fps 定时器模拟 |
macOS 没有 CADisplayLink,库就用定时器模拟 60 帧动画——这类细节都被封装在抽象层里。
手势方面,Platform+Gestures.swift 用#if canImport(UIKit)条件编译区分平台:iOS 支持双指缩放(pinch)和旋转手势,而tvOS 没有这些手势,相关类型会被条件排除,库自动退化为远程器友好的交互模式。
如何安装:三种方式任选其一
✅Swift Package Manager(推荐):在 Package.swift 中添加依赖,Package.swift 中声明了三大平台的支持范围:
platforms: [ .iOS(.v12), .tvOS(.v12), .macOS(.v10_12) ]✅CocoaPods:在 Podfile 中添加pod 'DGCharts',DGCharts.podspec 中三端部署目标分别为 iOS 12.0、tvOS 12.0、macOS 10.13
✅Carthage:官方已提供预编译二进制,构建速度快
💡 注意:5.0 版本起项目已从
Charts更名为DGCharts,目的是避免与 Apple 官方 Swift Charts 命名冲突。从 4.x 升级时建议阅读发布说明中的迁移指引。
三大平台上的实际渲染效果
下面的截图来自项目自带的测试快照(Tests/ChartsTests/Snapshots/),可以看到同一套图表代码在不同平台上的输出:
iOS 平台渲染的默认柱状图,双轴刻度 + 数值标签 + 图例一应俱全:
iOS 平台上的折线图,带圆形数据点与网格:
同一份折线图代码,输出到 tvOS 1080p 大屏(1920x1080)后依然清晰锐利:
tvOS 平台渲染的环形饼图,中心可显示自定义文本,适合电视大屏信息展示:
Demo 项目:动手体验多平台开发
仓库内置了两套 Demo,分别对应不同平台组合:
- iOS/tvOS Demo:位于 ChartsDemo-iOS/ 目录,包含 Swift 与 Objective-C 两套示例控制器,覆盖 20+ 种图表场景,可在 DemoListViewController.swift 中浏览完整列表
- macOS Demo:位于 ChartsDemo-macOS/ 目录,例如 BarDemoViewController.swift 展示了在 macOS 上构建分组柱状图,并额外演示了将图表导出为 PNG 保存到磁盘的功能
🎯 小提示:Demo 中还提供了自定义 Marker 组件(如 XYMarkerView.swift),选中数据点时可弹出气泡跟随显示,三端通用。
快速上手:5 步画出一张多平台图表
- 用 SPM 引入 DGCharts 并导入
import DGCharts - 创建图表视图,例如
BarChartView/LineChartView/PieChartView - 用
ChartDataEntry构建数据点,组装成 DataSet 与 ChartData - 按需配置坐标轴、图例、颜色(数据层配置代码三端通用)
- 将
data赋给图表视图,调用setNeedsDisplay()完成渲染
平台相关的"最后一公里"只是视图容器不同(UIView 或 NSView),数据层与渲染层代码可以原样复用。
多平台质量保障:分平台快照测试
项目用快照测试来守护三端渲染一致性:Tests/ChartsTests/ 下按Apple Silicon / x86两套设备架构,为iOS(390x844 手机屏幕)和 tvOS(1920x1080 电视屏幕)分别保存基准图片。柱状图、折线图、饼图等核心场景(见 BarChartTests.swift、LineChartTests.swift、PieChartTests.swift)都会自动比对渲染结果,任何一次改动如果导致某个平台画歪了,测试立刻报警——这正是"一套代码、三端一致"最直观的底气。
总结
| 维度 | 说明 |
|---|---|
| 支持平台 | iOS 12+、tvOS 12+、macOS 10.12+ |
| 图表类型 | 折线、柱状、饼、雷达、散点、蜡烛、气泡、组合图 8 种 |
| 跨平台机制 | NSUI* 抽象层 + 条件编译,自动适配触摸与远程器交互 |
| 安装方式 | SPM / CocoaPods / Carthage |
| 学习成本 | 一次学习,三端复用,并与 Android 端 API 保持一致 |
如果你正在做一个需要同时登陆 iPhone、Apple TV 和 Mac 的数据应用,DGCharts 的"一次编码、多端渲染"能力可以让图表这块的开发成本直接减半。🚀
【免费下载链接】ChartsBeautiful charts for iOS/tvOS/OSX! The Apple side of the crossplatform MPAndroidChart.项目地址: https://gitcode.com/gh_mirrors/cha/Charts
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考