在情节提要中,我将按钮附加到主视图作为SCNView的兄弟(按钮和SCNView都是主视图的子视图)。在启动时,这些按钮将在SCNView之前出现在屏幕上。这是很不幸的。您知道如何解决此问题吗?

// edit:在viedDidLoad:中以编程方式添加了按钮,作为SCNView的子视图。仍然存在相同的问题。

ios - 按钮出现在SCNView之前的屏幕上-LMLPHP

SettingsButton和View出现在SceneView之前。这发生在iPhone 5,5c和更低版本以及iPad上。(肯定是3,其他人不知道)

用于以编程方式添加视图的代码:

let uv = UIView(frame:myFrame)
uv.backgroundColor = UIColor.blackColor
sceneView.addSubview(uv)// scene view from storyboard


而已。 iOS如何花5到10秒的时间来加载应用程序,而不是匆匆忙忙地以不可预测的顺序在屏幕上添加视图。难道不是只花0.2 s的时间就能正确显示视图吗?真是愚蠢的问题

最佳答案

我想如果您通过调试器断点检查或登录viewDidLoad,您会发现SCNView实例确实确实在视图层次结构中。

您看到的是该视图的SceneKit内容不会立即显示。根据您对SceneKit的操作,加载内容并准备渲染可能需要一些时间,在此期间,其余视图层次结构仍然可见。这种延迟可能是不可避免的-您可能可以通过优化资产格式,减少场景中的内容数量等方法将其最小化。因此,听起来像这里的关键问题是使您的应用启动体验看起来像您想要的样子造成延迟。

做到这一点的一种好方法可能是显示某种启动图像,直到SceneKit准备显示为止。您可以将UIImageView放在情节提要中,设置为用启动屏幕遮盖所有内容(在应用程序接管之前,iOS可能会显示相同的启动图像),然后在SceneKit时隐藏该图像视图(甚至淡出吗?)。开始渲染。

要找出SceneKit开始渲染的时间,请将场景渲染器委托给您的对象之一并实现renderer:didRenderScene:atTime:。在每个帧上都会调用该方法,因此您可以使用它来捕获渲染第一帧时的内容(然后在后续帧中忽略它)。

关于ios - 按钮出现在SCNView之前的屏幕上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34002817/

10-14 23:16