用途:为在 iPhone Duo 上运行的游戏做屏幕适配。游戏虽不受多数设备 UI 指引约束(无工具栏、无分栏视图),但仍必须响应窗口尺寸变化,否则会出现黑边、拉伸或控件跑出屏幕。
主要能力与要求:可锁定竖屏或横屏,但锁定方向不等于可以假设固定尺寸。内屏不遵循 supported interface orientations,UIRequiresFullScreen 同样如此,设备开合时窗口仍会变化,必须为尺寸变化做规划。
宽高比优先于黑边:视口形状变化时,优先改变宽高比(扩充相机视锥、加宽可见视野);若设计无法接受可变宽高比,可加黑边/柱边但须用背景或主题美术填充;避免裸黑边。
UI 与触控:不要整体等比缩放场景,否则 HUD 文字和触控目标会随之缩小。世界可缩放,UI 应独立分层并以点为单位,保持跨姿态接近恒定的物理尺寸,触控控件不得因宽高比变化而小于舒适点击目标。
折痕问题:半折叠时内屏中部弯曲区域较难看清和点击,虚拟摇杆、开火键或拖拽目标落在该区域会变得不可靠。需查询保留区域,使交互控件避开 division region(折痕),参见 ../iphone-duo-adaptive-layout/SKILL.md;将触控控件锚定在屏幕外缘而非居中;同时注意遮挡区域(外前置摄像头始终存在,内摄像头激活时出现)。纯视觉、非交互内容可以跨越折痕。
值得考虑的姿态:桌面/笔电姿态(下半为触控面、上半为观看面)与帐篷姿态(免手持,适合放置、观战、氛围或回合制游戏),两者视为加分项,不要将功能依赖在用户可能不会使用的姿态上。分屏多任务下游戏可能只占内屏一半,需保证仍能正确渲染、控件不掉出边缘,虽不必保证良好体验但不能出错。
铰链作为输入:铰链角度可通过 SwiftUI 的 onHingeChange 或 UIKit 的 UIHingeInteraction 获得粗粒度状态与角度,可桥接到游戏引擎,用于特效、相机视差或玩法;需防护铰链为 nil(同一二进制会在所有非折叠 iPhone 运行),且不可作为执行某动作的唯一方式,详见 ../iphone-duo-hinge-and-scenes/SKILL.md。
引擎与限制:多数引擎提供 resize 事件与安全区查询,需把两者接好并把 resize 当作一等事件而非启动时读取的值。Unity 用 Screen.safeArea 并在运行时处理分辨率变化,Unreal 用 safe zone / title safe 并在视口尺寸变化时重算,Godot 用安全区 API 加能容忍宽高比变化的拉伸模式,SpriteKit / Metal 通过视图获得 resize,需让场景响应而非假定初始绘制尺寸。保留区域与铰链角度是 iOS 27.1 API,无引擎级等价实现,需原生插件,桥接方式同 ../iphone-duo-flutter/SKILL.md 与 ../iphone-duo-react-native/SKILL.md。
检查清单:把视口尺寸变化当作实时事件;无论方向锁定如何,每个姿态都填满屏幕;优先改变宽高比,若加黑边则用美术填充;跨姿态保持 HUD 文字与触控目标的物理尺寸;将交互控件锚定边缘并避开折痕;验证分屏下仍正常渲染;在 Device Hub 的 iPhone Duo 模拟器中测试开、合、半折、旋转等每个姿态。中文资料中未提供具体价格或收费信息。