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

如何在iPhone 13 Pro上让SceneKit实现120Hz刷新率?

SCNView开启120Hz ProMotion刷新率遗漏配置说明
  • 首先确认基础运行条件:必须使用iOS 15.0及以上系统,搭配iPhone 13 Pro/Pro Max、后续iPhone Pro系列、2018款及以后iPad Pro实机测试,模拟器不支持ProMotion高刷新率特性。
  • 补充Info.plist配置:除了设置CADisableMinimumFrameDurationOnPhone = YES外,iOS 15.4及以上系统还要求添加CAPreferredFrameRateRange字典类型字段,内部配置三个子项:
    • CAPreferredFrameRateRangeMinimum:数值类型,填1
    • CAPreferredFrameRateRangeMaximum:数值类型,填120
    • CAPreferredFrameRateRangePreferred:数值类型,填120
  • 调整SCNView帧率设置时机:不要在viewDidLoad生命周期方法中设置preferredFramesPerSecond,需要等视图关联到UIWindow层级后再设置,推荐放在viewDidAppear:方法中执行scnView.preferredFramesPerSecond = 120,避免配置被系统默认值覆盖。
  • 父容器同步配置:如果SCNView嵌套在UIScrollView、UINavigationController、UITabBarController等容器组件内部,需要同步将所有父容器的preferredFramesPerSecond属性设置为120,系统会取整个视图层级中最低的帧率上限作为实际调度值。
  • 排除性能瓶颈影响:如果以上配置完成后帧率仍未达标,可以先加载空SCNScene测试,排除场景本身渲染负载过高、GPU性能不足导致的帧率上不去问题。同时可以检查设备是否开启了低功耗模式,低功耗模式下系统会强制限制最高刷新率为60Hz。
  • 验证方式:不要完全依赖SCNView的showsStatistics统计值,可以通过CADisplayLink监控实际刷新率,示例代码如下:
// Swift 实现
let displayLink = CADisplayLink(target: self, selector: #selector(monitorFps(link:)))
displayLink.add(to: .main, forMode: .common)

@objc private func monitorFps(link: CADisplayLink) {
    print("实际屏幕刷新率:\(Int(1/link.duration))Hz")
}
// Objective-C 实现
CADisplayLink *displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(monitorFps:)];
[displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];

- (void)monitorFps:(CADisplayLink *)link {
    NSLog(@"实际屏幕刷新率:%ldHz", (long)(1/link.duration));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:45:03