按钮出现在 SCNView 之前的屏幕上
buttons appear on screen before SCNView
在情节提要中,我将按钮附加到主视图作为 SCNView 的兄弟(按钮和 SCNView 都是主视图的子视图)。在启动时,按钮先于 SCNView 出现在屏幕上。这是很不幸的。您知道如何解决这个问题吗?
//编辑:在 viedDidLoad: 中以编程方式添加按钮:作为 SCNView 的子视图。仍然是同样的问题。
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 秒就可以正确显示视图吗?真是愚蠢的问题
我想如果您通过调试器断点或登录 viewDidLoad
检查,您会立即发现 SCNView
实例确实在视图层次结构中。
您看到的是所述视图的 SceneKit content 没有立即出现。根据您使用 SceneKit 执行的操作,加载内容和准备渲染可能需要一些时间,在此期间视图层次结构的其余部分仍然可见。这种延迟可能是不可避免的——您可以通过优化资产格式、减少场景中的内容等来最大程度地减少它。所以听起来这里的关键问题是让您的应用程序启动体验看起来像您想要的方式,同时计算延迟。
执行此操作的一个好方法可能是在 SceneKit 准备好显示之前显示某种启动图像。您可以在情节提要中放置一个 UIImageView
,设置为使用启动画面掩盖所有内容(可能在您的应用程序接管之前显示相同的启动图像 iOS),然后隐藏该图像视图(使用淡入淡出)甚至出来?)当 SceneKit 开始渲染时。
要了解 SceneKit 何时开始渲染,请将您的对象之一设为场景渲染器委托并实现 renderer:didRenderScene:atTime:。该方法在每一帧上都会被调用,因此您可以使用它来捕捉第一帧的渲染时间(然后在后续帧中忽略它)。
在情节提要中,我将按钮附加到主视图作为 SCNView 的兄弟(按钮和 SCNView 都是主视图的子视图)。在启动时,按钮先于 SCNView 出现在屏幕上。这是很不幸的。您知道如何解决这个问题吗?
//编辑:在 viedDidLoad: 中以编程方式添加按钮:作为 SCNView 的子视图。仍然是同样的问题。
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 秒就可以正确显示视图吗?真是愚蠢的问题
我想如果您通过调试器断点或登录 viewDidLoad
检查,您会立即发现 SCNView
实例确实在视图层次结构中。
您看到的是所述视图的 SceneKit content 没有立即出现。根据您使用 SceneKit 执行的操作,加载内容和准备渲染可能需要一些时间,在此期间视图层次结构的其余部分仍然可见。这种延迟可能是不可避免的——您可以通过优化资产格式、减少场景中的内容等来最大程度地减少它。所以听起来这里的关键问题是让您的应用程序启动体验看起来像您想要的方式,同时计算延迟。
执行此操作的一个好方法可能是在 SceneKit 准备好显示之前显示某种启动图像。您可以在情节提要中放置一个 UIImageView
,设置为使用启动画面掩盖所有内容(可能在您的应用程序接管之前显示相同的启动图像 iOS),然后隐藏该图像视图(使用淡入淡出)甚至出来?)当 SceneKit 开始渲染时。
要了解 SceneKit 何时开始渲染,请将您的对象之一设为场景渲染器委托并实现 renderer:didRenderScene:atTime:。该方法在每一帧上都会被调用,因此您可以使用它来捕捉第一帧的渲染时间(然后在后续帧中忽略它)。