用途:帮助开发者在 iPhone Duo 上实现三类能力——响应铰链、参与 Split View 分屏多任务、在双屏上同时呈现自有 UI。
铰链:系统本身会响应铰链(如壁纸随开合角度缩放),应用可读取同一信号。SwiftUI 用 onHingeChange 修饰符,UIKit 用 UIHingeInteraction。两者都提供粗略状态(closed、partially open、fully open)与实时连续角度。注意框架差异:SwiftUI 角度为 Angle,UIKit 为弧度 CGFloat;SwiftUI 的 DeviceHinge.Status 是 struct(switch 需 default),UIKit 的 UIHinge.Status 是含 .unknown 的 enum。状态由系统根据角度与设备方向判定,不要自行按阈值重算;更新频率与精度由系统策略决定,不要假设固定频率。使用前需判断是否存在铰链(nil 表示设备无铰链)以及设备是否处于关心的状态,通常只在部分打开时更新,并需 else 分支重置状态,避免效果停留在旧值。铰链适合连续型交互与效果(如用折叠角度驱动 pitch bend),不适合用于布局,布局应使用 arrangements 与 reserved regions。
Split View:所有应用都可参与,通过主屏手势拖放应用并排;另有画中画固定时视频与应用堆叠的布局,应用处理方式相同。若应用已支持 iPad 或 iPhone 镜像下的尺寸调整,基本已就绪;系统提供 size class 与场景几何信息。需测试垂直排列的栏内容出现在应用任一侧时的非对称安全区处理。
多场景:iPhone Duo 是首个支持同一应用多实例 UI 的 iPhone,若 iPad 已支持则同样可用。新窗口不能在外部显示屏创建,仅限内部显示屏,且可用性随设备开合动态变化(iPad 无此行为)。因此请求新场景需处理错误,优先使用 UIWindowSceneActivation,它会在新窗口不可用时自动隐藏。
场景配件:可为应用主 UI 在另一显示屏配对附加内容,非 Duo 专属,但 Duo 让每个用户都有两块屏。可用性由系统动态控制,默认启用且可随时切换,应通过 observation tracking 或 onAvailabilityChange 观察并在 UI 中反映。CameraCaptureAccessory 面向相机应用,把 UI 放到外部显示屏,条件是应用在内部显示屏全屏且相机会话处于活动状态;在相机视图上注册(SwiftUI 用 sceneAccessory 修饰符),可配合工具栏开关并用 onAvailabilityChange 在不可用时禁用。
限制与检查清单:先支持尺寸调整;在 Split View 两侧与各种姿态下测试;支持多窗口时处理场景请求失败并采用 UIWindowSceneActivation;评估铰链效果是否真正有益并做 nil 与状态重置保护;相机应用评估外部显示屏配件是否有帮助。具体相机细节(哪颗摄像头在流、朝向)见 iphone-duo-camera 技能。