SKView集成到UIViewController中,而UITextFields滞后

时间:2018-09-03 23:24:21

标签: ios swift sprite-kit uitextfield skscene

我正在尝试在登录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手势的处理。

1 个答案:

答案 0 :(得分:1)

您的问题似乎与SKView和其他UIKit对象之间的布局同步不同有关。 SKView具有一个名为isAsynchronous默认= true )的属性,该属性指示  内容是否异步呈现。 您可以尝试设置:

skView.isAsynchronous = false

与核心动画更新同步化您的SKView。 这可能还不够,因为您将SKView与项目的核心动画进行同步,但是总是存在 UIKit风格的动画同步。 如果该属性不能解决您的问题,您还可以更改preferredFramesPerSecond属性。请记住,当您尝试混合使用两个框架(sprite-kitUIKit)时,不可避免地会导致麻烦。