2016-03-04 73 views
0

我的应用使用图像和文本替换SceneKit内容的“页面”。当我从图像页面前进到新的SceneKit页面时,先前的SceneKit页面中的内容在被新内容替换之前会短暂显示。质朴。之前SceneKit内容的闪烁

我只使用一个SCNScene和一个SCNView。当我转换到图像类型页面时,我隐藏了SCNView。要恢复新SceneKit显示我:

  1. 删除所有来自文件
  2. rootNode
  3. 负荷新节点图节点添加新节点图的rootNode
  4. 取消隐藏SCNView

很明显,这个隐藏是异步的,我看到了新的场景的剩余部分,而新的场景正在建立。我和AVPlayer也有类似的问题。

在过去的应用程序中,我遇到了与MPMoviePlayer相同的问题,并通过在电影视图上显示空白视图并隐藏该通知指出当前电影已加载来解决该问题。也许我可以用相同的方式处理AVPlayer问题,但我不认为这适用于SceneKit。即使在AVPlayer的情况下,如果可能的话,我想要一个更好的方法来处理这个问题。

edit_1:我试过Hal的交换了SCNScenes的想法,但仍然得到了暂时的残留图像。我试过使用两个SCNViews,并交替地将它们交换出来。在退出当前场景之前,我也尝试将相机移动过可见元素。 prepareObjects:withCompletion handler什么也没做。

看起来,它不是节点,也不是SCNScene,它是持久的,而是场景的渲染图像。如上所述,通过观看电影播放器​​的这种效果也支持了这一点。

edit_2:我尝试了一个掩码,但是像所有其他尝试失败一样。我使用SCNAction将屏幕移出屏幕加上一个完成处理程序,以确保只在之后才进行更改,我确实取得了“成功”。但是,这会将加载时间延长大约800%!最好有丑陋的“闪光灯”。

+0

看起来你似乎太努力了。你为什么不使用视图的'scene'属性来设置你的内容的新场景,或者使用'presentScene(withTransition:incomingPointOfView:completionHandler :)'?'prepareObject(:shouldAbortBlock)'也值得一看。 –

+0

我会重新讨论操作场景,我对于不断重新添加摄像头,灯光等可能造成的开销犹豫不决,但我想他们对我使用的一些模型表现出色。我正在避免你提到的方法,我希望与iOS 8兼容。 – bpedit

+0

我得到相同的问题交换场景。我不认为这个问题与在'SceneKit'中工作的特别相关,这也体现在'AVPlayer'和'MPMoviePlayer'上。由于你的'presentScene ...'指针,我看到了一个'prepareObjects:withCompletion处理程序',我会尝试。 – bpedit

回答

0

我有些工作,但我很怀疑。我创建了一个“nullCamera”,指向一个空的视野。在切换场景之前,我将相机分配给SCNView。当新的场景加载主摄像机被重新分配。但我对这种方法感到紧张。

我以前试过,它没有工作。它现在起作用,因为我将代码移到上游(而不是它似乎属于的地方)。但干预代码与SceneKit无关。它仅仅分析字符串的数据,设置颜色首选项并在标签中显示标题。所以我担心这只是时间问题,我可能会再次看到问题,比如更快的设备。也许将标题写入视图元素也会强制重新显示SCNView? (我似乎无法使用代码)