news 2026/9/20 13:13:14

DGCharts多平台开发:一套代码如何支持iOS、tvOS与macOS三大平台

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DGCharts多平台开发:一套代码如何支持iOS、tvOS与macOS三大平台

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 / tvOSmacOS
NSUIViewUIViewNSView
NSUIImageUIImageNSImage
NSUIScrollViewUIScrollViewNSScrollView
NSUIDisplayLinkCADisplayLink60fps 定时器模拟

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 步画出一张多平台图表

  1. 用 SPM 引入 DGCharts 并导入import DGCharts
  2. 创建图表视图,例如BarChartView/LineChartView/PieChartView
  3. ChartDataEntry构建数据点,组装成 DataSet 与 ChartData
  4. 按需配置坐标轴、图例、颜色(数据层配置代码三端通用)
  5. 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/20 13:11:49

Ultimate Vocal Remover:三步出干净伴奏

Ultimate Vocal Remover:三步出干净伴奏 【免费下载链接】ultimatevocalremovergui GUI for a Vocal Remover that uses Deep Neural Networks. 项目地址: https://gitcode.com/GitHub_Trending/ul/ultimatevocalremovergui 手里一首歌,只想要一…

作者头像 李华
网站建设 2026/9/20 13:09:55

标准成本计算与差异分析:从公式到实务的成本控制指南

简介:《成本会计强化讲义》第三章以标准成本计算为核心,面向会计学考研学生及成本管理学习者,系统讲解标准成本的概念、种类与制定流程。内容涵盖理想标准成本与正常标准成本的区分、现行标准成本与基本标准成本的适用场景,以及直…

作者头像 李华
网站建设 2026/9/20 13:09:12

AU面部动作单元识别:基于FACS的表情分析原理与工程实践

简介:以FACS理论为基础,AU_Recognition-master 是面向情感计算与计算机视觉研究者的面部表情单元识别工具,可对人脸眼部、嘴部等局部区域的肌肉动作单元进行检测与强度分析,弥补传统表情识别只能区分喜悦、悲伤等整体情绪的粒度不…

作者头像 李华
网站建设 2026/9/20 13:08:40

OpenSSL 1.1.1 离线安装包实战:版本冲突与证书验证的解决方案

简介:OpenSSL 1.1.1离线安装包专为无法直接联网的内网服务器或开发环境准备,省去从源码编译时反复拉取依赖的麻烦,解决离线部署TLS/SSL基础组件难的问题。压缩包内为完整OpenSSL 1.1.1源码树,解压后可使用./config --prefix... --…

作者头像 李华