我的应用使用图像和文本替换SceneKit
内容的“页面”。当我从图像页面前进到新的SceneKit
页面时,先前的SceneKit
页面中的内容在被新内容替换之前会短暂显示。质朴。之前SceneKit内容的闪烁
我只使用一个SCNScene
和一个SCNView
。当我转换到图像类型页面时,我隐藏了SCNView
。要恢复新SceneKit
显示我:
- 删除所有来自文件
- 从
rootNode
- 负荷新节点图节点添加新节点图的
rootNode
- 取消隐藏
SCNView
很明显,这个隐藏是异步的,我看到了新的场景的剩余部分,而新的场景正在建立。我和AVPlayer
也有类似的问题。
在过去的应用程序中,我遇到了与MPMoviePlayer
相同的问题,并通过在电影视图上显示空白视图并隐藏该通知指出当前电影已加载来解决该问题。也许我可以用相同的方式处理AVPlayer
问题,但我不认为这适用于SceneKit
。即使在AVPlayer
的情况下,如果可能的话,我想要一个更好的方法来处理这个问题。
edit_1:我试过Hal的交换了SCNScenes
的想法,但仍然得到了暂时的残留图像。我试过使用两个SCNViews
,并交替地将它们交换出来。在退出当前场景之前,我也尝试将相机移动过可见元素。 prepareObjects:withCompletion handler
什么也没做。
看起来,它不是节点,也不是SCNScene
,它是持久的,而是场景的渲染图像。如上所述,通过观看电影播放器的这种效果也支持了这一点。
edit_2:我尝试了一个掩码,但是像所有其他尝试失败一样。我使用SCNAction
将屏幕移出屏幕加上一个完成处理程序,以确保只在之后才进行更改,我确实取得了“成功”。但是,这会将加载时间延长大约800%!最好有丑陋的“闪光灯”。
看起来你似乎太努力了。你为什么不使用视图的'scene'属性来设置你的内容的新场景,或者使用'presentScene(withTransition:incomingPointOfView:completionHandler :)'?'prepareObject(:shouldAbortBlock)'也值得一看。 –
我会重新讨论操作场景,我对于不断重新添加摄像头,灯光等可能造成的开销犹豫不决,但我想他们对我使用的一些模型表现出色。我正在避免你提到的方法,我希望与iOS 8兼容。 – bpedit
我得到相同的问题交换场景。我不认为这个问题与在'SceneKit'中工作的特别相关,这也体现在'AVPlayer'和'MPMoviePlayer'上。由于你的'presentScene ...'指针,我看到了一个'prepareObjects:withCompletion处理程序',我会尝试。 – bpedit