WWDC Quick Look 💓 By SwiftGGTeam
Design app experiences with charts

Design app experiences with charts

观看原视频

Highlight

Apple 在 WWDC22 推出了 Swift Charts 框架,同时发布了一套图表设计原则,帮助开发者在应用中用图表更清晰、更有吸引力地传达数据。

核心内容

什么时候该用图表

01:53

你的应用里可能有很多数据可以展示,但把所有数据都做成图表只会让用户迷失。图表的核心作用是引导注意力,让用户快速抓住最重要的信息。

三种适合用图表的场景:

  • 展示历史或预测值:时间序列数据用图表能直观呈现变化趋势
  • 展示部分与整体的关系:进度、完成度、剩余量等状态信息
  • 比较不同项目或类别:让用户一眼看出差异

Apple 用一个煎饼餐车 App 举例。这个 App 原本只有订单录入和交易记录两个标签页。交易记录只是一张列表,餐车老板需要从中自己提炼信息。通过图表,可以把这张列表变成可操作的洞察:近期销售额、什么口味最受欢迎、每天去哪个位置生意最好。

如何描述图表

03:29

图表不能只放一个标题。标题只标注了图表元素,没有传达任何信息。

把标题改成自包含的描述:

  • 基础版:“过去 30 天共售出 1,234 个煎饼”
  • 进阶版:“过去 30 天销售额上涨 12%,共售出 1,234 个煎饼”

第二种方式帮助用户判断数据是高是低、是涨是跌,对不熟悉的数据尤其有用。

从多个视角丰富数据

05:06

一张图表可以从三个层面增加细节:

  • 宏观:整个数据集的汇总,如总计、平均值
  • 中观:数据子集,如工作日 vs 周末、不同口味、不同城市
  • 微观:单个数据点,如最后一笔交易、最大单笔销售额

在煎饼餐车 App 中,可以在销售图表下方添加几行可点击的汇总数据。点击”日均销售额”,图表叠加平均线;点击”工作日 vs 周末”,图表高亮对比;点击”最佳销售日”,图表跳到那一天。

图表尺寸与交互层级

06:42

图表按尺寸和交互深度分为三级:

静态小图表:Watch 表盘 complication、Stocks 的缩略图、Health 的趋势卡片。它们通常作为入口,点击后进入更大的图表。小图表不需要网格线、标签或交互,因为用户预期点击后能看到详情。

交互式中等图表:通常是视图全宽,占不满全高。需要坐标轴和标签,支持触摸查看精确数值,可以切换时间范围。

大型深度图表:占据大量垂直空间,支持深度数据探索。功能应该渐进式展开,让用户自己选择信息密度。

从小图表到完整图表的过渡要保持连续性:形状不变、已显示的数字保留。可以添加信息,但不能换成完全不同的内容。

图表设计系统

10:01

当应用中有多个图表时,就形成了一个图表设计系统。

使用熟悉的图表形式。柱状图和折线图是大多数人日常接触的形式。散点图相对少见,需要额外引导。如果你想做独特的图表(如 Activity 圆环),它应该是应用的核心,而不是附属功能。

差异是有意义的信号。当两个图表展示不同信息时,设计上的差异帮助用户注意到这一点。Apple 演示了从”近期销售”到”过去 12 个月销售”的演变:

  1. 只改描述 —— 变化容易被忽略
  2. 给第二个图表不同颜色 —— 更容易注意到这是不同的图表
  3. 改变数据表示方式(从柱状图变成展示每月销售范围的图表)—— 配合描述和样式变化,确保用户注意到主题、时间范围和指标都不同了

详细内容

Swift Charts 框架

01:22

WWDC22 新推出的 Swift Charts 框架让在 Apple 设备上制作图表变得简单。虽然本场 session 聚焦设计原则,但框架本身提供了声明式 API,与 SwiftUI 深度集成。

图表描述的最佳实践

// 不好的做法:只标注元素
Text("Sales in the Past 30 Days")

// 好的做法:自包含的描述
Text("Sales in the past 30 days totaled 1,234 pancakes.")

// 更好的做法:解读数据
Text("Sales for the past 30 days are up 12%, totaling 1,234 pancakes.")

关键点

  • 描述应该独立阅读时也有信息量
  • 对不熟悉的数据,用完整句子降低理解成本
  • 加入趋势解读(涨跌百分比)帮助用户判断数据意义

渐进式展开复杂度

// 小静态图表作为入口
SalesChart(data: last7Days)
    .frame(height: 80)
    .onTapGesture {
        // 点击进入完整图表
        showDetailChart = true
    }

// 完整图表保留相同数据上下文
DetailSalesChart(data: last30Days)
    .frame(height: 300)
    // 添加交互:时间范围切换、精确数值查看

关键点

  • 小图表和完整图表展示相同数据形状
  • 小图表中可见的数字在完整图表中仍然可见
  • 可以添加信息,但不能替换为完全不同的内容

设计差异化的图表

当应用中有多个图表时,通过以下方式创造有意义的差异:

  • 颜色:不同主题的图表使用不同主色
  • 方向:横向柱状图 vs 纵向柱状图区分不同数据类型
  • 样式:实心柱 vs 范围柱表示不同的指标含义
// 近期销售 —— 纵向柱状图,主色调
BarChart(data: recentSales)
    .foregroundStyle(.blue)

// 热门口味 —— 横向柱状图,强调对比
HorizontalBarChart(data: popularFlavors)
    .foregroundStyle(.green)

// 城市销售趋势 —— 折线图,展示变化
LineChart(data: citySales)
    .foregroundStyle(.orange)

核心启发

1. 给健身 App 加趋势图表

  • 做什么:把用户的训练记录从列表变成周/月趋势图
  • 为什么值得做:Swift Charts 让这件事的代码量从几百行降到几十行,用户能直观看到进步曲线
  • 怎么开始:用 Chart 视图包裹训练数据,选择合适的标记类型(BarMarkLineMark

2. 给记账 App 加消费分析

  • 做什么:按类别展示消费占比,按时间展示消费趋势
  • 为什么值得做:用户记账的核心诉求是”钱花哪了”,图表比数字列表直观得多
  • 怎么开始:用 SectorMark 做饼图展示类别占比,用 BarMark 做月度对比

3. 给习惯追踪 App 加完成度可视化

  • 做什么:用环形图或进度条展示本周/本月习惯完成率
  • 为什么值得做:进度可视化是行为心理学中有效的正向反馈机制
  • 怎么开始:用 SectorMarkinnerRadius 参数创建环形进度图

4. 给天气 App 加温度趋势

  • 做什么:展示未来 24 小时温度变化曲线,叠加降水概率
  • 为什么值得做:温度数字列表不如曲线直观,叠加信息让一张图表传递更多信息
  • 怎么开始:用 LineMark 画温度曲线,用 AreaMark 叠加降水概率区域

关联 Session

评论

GitHub Issues · utterances