我正在尝试在登录UI中使用SKView
来播放某些动画。 SKView
作为子视图被添加到LoginContainerView
以及包含UITextField和登录按钮的视图中。所有子视图都使用自动布局进行放置,并且附加到FireScene
的{{1}}的scaleMode设置为SKView
。
从这个剪辑https://streamable.com/5it17可以清楚地看到我遇到的问题。
剪辑说明:每当我双击任何一个UITextField(触发 UIMenuController /粘贴按钮),
.resizeFill
会冻结一小段时间 时间(但非常明显),FPS下降到30左右,持续1-2秒。
FireScene
作为其子节点添加的唯一节点是经过修改的萤火虫SKEmitterNode模板。我相当确定这与实际代码无关(因为它非常简单明了),并且可能是UIKit与SpriteKit错误混合在一起。
相关代码:
FireScene
PS:我曾尝试使用Time Profiler对应用程序进行配置,似乎瓶颈是UIKit本身对UITextField手势的处理。
答案 0 :(得分:1)
您的问题似乎与SKView
和其他UIKit
对象之间的布局同步不同有关。
SKView
具有一个名为isAsynchronous(默认= true )的属性,该属性指示
内容是否异步呈现。
您可以尝试设置:
skView.isAsynchronous = false
与核心动画更新同步化您的SKView
。
这可能还不够,因为您将SKView
与项目的核心动画进行同步,但是总是存在 UIKit风格的动画同步。
如果该属性不能解决您的问题,您还可以更改preferredFramesPerSecond属性。请记住,当您尝试混合使用两个框架(sprite-kit
和UIKit
)时,不可避免地会导致麻烦。