如何为CAFrameRateRange合理选择minimum、maximum、preferred参数值?
CADisplayLink帧率范围参数选择与ProMotion适配
针对你提出的三个问题,结合iOS 15+的CAFrameRateRange特性,给出具体的参数选择建议与实践说明:
1. 流畅动画/高性能场景的参数设置
根据业务场景的帧率需求,分以下两种情况配置:
- 极致流畅场景(3D游戏、实时交互动效、专业绘图预览):
直接拉满设备支持的最高帧率区间,保证性能优先:
这里if #available(iOS 15.0, *) { displayLink.preferredFrameRateRange = CAFrameRateRange(minimum: 60, maximum: 120, preferred: 120) } else { displayLink.preferredFramesPerSecond = 60 }minimum设为60,避免系统降到低帧率影响流畅度;maximum和preferred设为设备支持的最高值(如120),让ProMotion设备持续维持最高刷新率。 - 普通流畅场景(列表滚动、基础UI转场、常规动画):
兼顾流畅度与能效,设置灵活区间:
这个配置下,动画执行时系统会优先维持60帧稳定,无动画时可降到30帧节省功耗;同时允许系统在需要时(如快速滑动)提升到120帧,兼顾体验与续航。if #available(iOS 15.0, *) { displayLink.preferredFrameRateRange = CAFrameRateRange(minimum: 30, maximum: 120, preferred: 60) } else { displayLink.preferredFramesPerSecond = 60 }
2. 对ProMotion显示屏的影响
ProMotion支持10-120Hz的动态刷新率,CAFrameRateRange的三个参数会直接约束系统的帧率调整逻辑:
- minimum:限制系统能降到的最低帧率下限。比如设为30,即使内容完全静止,系统也不会低于30Hz刷新,避免帧率波动过大导致的视觉卡顿。
- maximum:设定系统能达到的最高帧率上限。如果设为60,ProMotion设备最高只会跑60Hz,无法触发120Hz高刷;只有设为120,才允许系统在需要时调用高刷新率。
- preferred:是你期望的理想帧率,系统会优先尝试维持这个值。当内容负载过高(比如复杂3D渲染)达不到
preferred时,系统会向下调整,但不会低于minimum;当负载较低且有高帧率需求时,会在maximum范围内向上适配。
比如你当前的30-120-60配置,ProMotion设备会在动画时稳定60帧,静止时降到30帧,快速滑动这类需要更高流畅度的场景则自动升到120帧。
3. 自适应帧率与能效优化的权衡点及最佳实践
核心权衡点
- 流畅度vs功耗:高帧率(如120Hz)会大幅提升功耗,ProMotion设备持续跑120Hz时续航会比60Hz下降约15%-20%;低帧率则会节省电量,但可能牺牲部分动态场景的流畅度。
- 自定义控制vs系统自适应:自定义参数能满足业务特殊需求,但系统自带的自适应策略已经针对不同场景做了优化,过度自定义可能反而导致体验下降。
最佳实践
- 动态调整参数:根据当前业务场景切换帧率区间。比如进入游戏界面时切换到60-120-120,回到主界面时切回30-120-60,兼顾不同场景的需求。
- 避免强制锁死高帧率:除非业务必须(如专业电竞游戏),不要将
minimum设为120,否则设备会一直维持高刷新率,功耗激增。 - 匹配内容固有帧率:比如播放30fps的视频时,将
minimum、maximum、preferred都设为30,避免系统动态调整帧率导致视频播放卡顿或画面撕裂。 - 依赖系统默认逻辑:如果没有特殊需求,推荐使用你当前的30-120-60配置,让系统根据内容自动调整帧率,平衡流畅度与能效。
- 兼容非ProMotion设备:非ProMotion设备(如iPhone 14及以下)刷新率固定为60Hz,
CAFrameRateRange的maximum设为120不会有负面影响,系统会自动适配到60Hz。
内容的提问来源于stack exchange,提问作者zeus
相关产品推荐
相关产品推荐

