Highlight
WWDC21 第三天聚焦 AR 摄影测量、Shortcuts Action 设计、UIKit 样式系统、Apple Watch 无障碍创新、Vision 框架人物分割、iCloud Keychain 验证码生成器,以及可发现性设计原则。
核心内容
周三的 WWDC21 回顾串起了一系列具体的技术更新,每个都直接回应开发者的实际需求。
AR 领域:Object Capture 让开发者用几十张照片就能生成 3D 模型,不用再请外包建模师。适合电商产品展示、AR 菜单、虚拟试穿等场景。
Shortcuts 和 Siri:Action 设计指南告诉你应该暴露哪些应用功能、如何设计参数,让用户通过语音和快捷指令更自然地使用你的应用。
UI 框架更新:UIKit 新的 UIButton.Configuration 和 contentConfiguration 让按钮和单元格样式配置更声明式,同时 Interface Builder 支持预览不同辅助功能设置下的效果。
无障碍创新:Apple Watch 的 AssistiveTouch 通过传感器组合和机器学习检测手臂微动作,让上肢障碍用户通过手势完全控制手表。这是一个”为少数人设计、惠及所有人”的典型案例。
Vision 框架:Person Segmentation API 可以把人物从背景中分离出来,实现虚拟背景、人物抠图。同时人脸检测支持戴口罩,姿态指标从离散值改为连续值。
安全认证:iCloud Keychain 内置 TOTP 验证码生成器,支持一键设置、自动填充、跨设备同步,比 SMS 更安全可靠。
设计原则:可发现性设计通过视觉暗示、渐进式披露、一致交互和反馈闭环,让用户自然发现应用功能。
详细内容
Object Capture:用照片生成 3D 模型
(00:08)
传统 3D 建模需要专业软件和技能,周期长、成本高。Object Capture 用摄影测量技术从照片恢复 3D 结构。
API 入口是 PhotogrammetrySession:
import RealityKit
let inputFolderUrl = URL(fileURLWithPath: "/tmp/Sneakers/", isDirectory: true)
let session = try! PhotogrammetrySession(
input: inputFolderUrl,
configuration: PhotogrammetrySession.Configuration()
)
关键点:
- 照片可以是 iPhone、iPad、单反或无人机拍摄
- HEIC 格式照片会自动提取深度数据
- 支持 Reduced、Preview、Reduced、Raw 四种精度级别
处理异步输出流:
Task {
do {
for try await output in session.outputs {
switch output {
case .requestProgress(let request, let fraction):
print("Request progress: \(fraction)")
case .requestComplete(let request, let result):
if case .modelFile(let url) = result {
print("Request result output at \(url).")
}
case .processingComplete:
print("Completed!")
default:
break
}
}
} catch {
print("Fatal session error! \(error)")
}
}
关键点:
for try await持续接收消息,直到 session 释放.requestProgress可以驱动进度条.requestComplete返回模型文件 URL
Shortcuts Action 设计
(00:13)
好的 Action 具备五个特质:有用、模块化、多模态、清晰、可发现。
有用:解决用户实际问题,如日历的”添加事件”、邮件的”发送消息”。
模块化:输入输出设计通用,一个 Action 的输出可以作为下一个 Action 的输入。
多模态:同一个 Action 可以在 Shortcuts 拖拽、Siri 语音、系统建议中使用。
清晰:名称用动词开头,参数标签准确描述内容。
可发现:在应用内教育用户,捐赠 Intent 让系统学习,提供示例 Shortcuts。
UIKit 样式系统
(00:22)
iOS 15 引入 UIButton.Configuration:
var config = UIButton.Configuration.filled()
config.title = "Continue"
config.image = UIImage(systemName: "arrow.right")
config.imagePlacement = .trailing
config.cornerStyle = .capsule
let button = UIButton(configuration: config)
单元格 contentConfiguration:
var content = cell.defaultContentConfiguration()
content.text = "Title"
content.secondaryText = "Subtitle"
content.image = UIImage(systemName: "star")
cell.contentConfiguration = content
关键点:
- Configuration 是值类型,修改后需重新赋值
- 自动适配 Dynamic Type 和辅助功能设置
- Interface Builder 可预览不同辅助功能设置下的效果
Apple Watch 无障碍功能
(00:37)
AssistiveTouch 结合三个传感器检测手臂微动作:
- 加速计(检测手臂运动)
- 陀螺仪(检测手腕旋转)
- 心率传感器(检测血流变化)
手势包括捏合、双捏合、握拳、双握拳,通过机器学习模型与日常运动区分。
关键点:
- 不需要新硬件,组合现有传感器即可实现
- 低影响手势设计,减少能量消耗
- 四个手势可实现完整操作:导航、选择、滚动、返回
Vision 框架人物分割
(00:48)
Person Segmentation API:
let request = VNGeneratePersonSegmentationRequest()
let requestHandler = VNImageRequestHandler(url: imageURL, options: options)
try requestHandler.perform([request])
let mask = request.results!.first!
let maskBuffer = mask.pixelBuffer
质量级别:
accurate:最高质量,适合计算摄影balanced:平衡,适合逐帧视频处理fast:最快,适合实时流处理
人脸检测支持戴口罩,姿态指标(roll、yaw、pitch)从离散值改为连续值。
iCloud Keychain 验证码生成器
(00:55)
iOS 15 将 TOTP 验证码生成器内置到 iCloud Keychain。
支持一键设置:
// 在 App 中
func openVerificationCodeSetup(url: URL) {
if let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
scene.open(url, options: nil, completionHandler: nil)
}
}
// 在网页中
// <a href="apple-otpauth://totp/Example?secret=...&issuer=example.com">设置验证码</a>
关键点:
otpauth://URL 加上apple-前缀直接打开 iCloud Keychain- 验证码自动填充,与 SMS 验证码体验一致
- 跨设备同步,安全备份在 iCloud 中
可发现性设计
(01:07)
可发现性设计通过四个原则让用户自然发现功能:
视觉暗示:主操作用高对比度颜色,新功能用徽章或动画提示。
渐进式披露:先展示基本功能,高级功能在需要时才出现。长按、滑动等手势揭示更多操作。
一致交互:遵循系统标准交互模式,如下拉刷新、左滑删除。
反馈闭环:每个操作都有即时反馈,让用户确认”我做对了”。
核心启发
- 电商产品可视化:用 Object Capture 为商品生成 3D 模型,在 AR Quick Look 中展示,让用户在家就能看到产品真实尺寸和细节
- 语音优先的应用流程:为高频操作设计 Shortcuts Action,让用户不用打开应用就能完成任务,结合 Siri 实现全语音操作
- 虚拟背景和人物抠图:用 Vision 的 Person Segmentation 实现视频通话虚拟背景、照片编辑人物抠图,无需第三方 SDK
- 无障碍设计的普适价值:AssistiveTouch 最初为上肢障碍用户设计,但其手势控制方式可以惠及所有用户,如运动场景下单手操作
- 更安全的认证流程:用 iCloud Keychain 验证码替代 SMS,降低成本的同时提升安全性,端到端加密保证验证码不会泄露
关联 Session
- Create 3D models with Object Capture — 摄影测量 API 详解
- Design great actions for Shortcuts, Siri, and Suggestions — Action 设计指南
- Build interfaces with style — UIKit 新样式系统
- Accessibility by design: An Apple Watch for everyone — Apple Watch 无障碍功能故事
- Detect people, faces, and poses using Vision — Vision 框架人物分割
- Secure login with iCloud Keychain verification codes — 验证码生成器实现
- Discoverable design — 可发现性设计原则
评论
GitHub Issues · utterances