You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iPhone13 Pro设备SpriteKit设60Hz掉帧但120Hz运行正常问题求助

问题根因

这是搭载ProMotion自适应刷新率屏幕的iPhone 13 Pro系列在iOS 15上的已知SpriteKit帧调度bug,和你的代码性能无关:

  • 未开启高刷权限时,系统给SpriteKit渲染队列分配的vsync对齐窗口存在偏移,会随机错过单帧同步信号,导致平均帧率稳定落在55-56fps区间
  • 辅助功能开启限制帧率后,系统会强制全局刷新率锁为60fps,刚好触发了同样的调度偏移逻辑,所以能稳定复现问题
  • 你手动开启高刷权限并设置preferredFramesPerSecond为120后,系统会切换到高优先级的渲染调度队列,对齐逻辑恢复正常,所以帧率能跑满。

适配方案

方案1(推荐,兼容全设备)

  1. 在Info.plist中添加键CADisableMinimumFrameDurationOnPhone,值设置为YES开启高刷权限
  2. 代码中动态设置帧率,自动适配设备最高刷新率:
if #available(iOS 15.0, *) {
    // 读取设备支持的最高刷新率自动适配
    view.preferredFramesPerSecond = UIScreen.main.maximumFramesPerSecond
} else {
    // iOS15以下设备统一用60fps
    view.preferredFramesPerSecond = 60
}

该方案在无高刷的旧设备上会自动回退到60fps,也不会触发调度bug,同时ProMotion设备可以跑满120fps的流畅度。

方案2(仅需保留60fps时可选)

如果不需要支持120fps,可以在SKScene加载完成后,延迟100ms再重新设置一次preferredFramesPerSecond = 60,即可绕开初始化阶段的调度偏移问题,无需开启高刷权限。

内容的提问来源于stack exchange,提问作者Manny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 17:18:02