之前SceneKit内容的闪烁

时间:2016-03-04 16:19:46

标签: swift scenekit

我的应用程序将SceneKit内容的“页面”替换为图像和文本。当我从图像页面前进到新的SceneKit页面时,在被新内容替换之前,会暂时显示上一个SceneKit页面中的内容。时髦。

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

  1. rootNode
  2. 中删除所有节点
  3. 从文件
  4. 加载新节点图
  5. 将新节点图添加到rootNode
  6. 取消隐藏SCNView
  7. 显然,取消隐藏是异步的,我在新的场景建立时看到了早期场景的残余。我也遇到了与AVPlayer类似的问题。

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

    edit_1:我已经尝试过哈尔关于换掉SCNScenes的想法,但仍然得到了瞬间残留图像。我尝试过使用两个SCNViews并交替交换它们。在退出当前场景之前,我还尝试将相机移过可见元素。 prepareObjects:withCompletion handler什么也没做。

    似乎不是节点,而是SCNScene是持久的,而是渲染的场景图像。如上所述,通过电影播放器​​见证这种效果也可以支持这一点。

    edit_2:我尝试了一个面具,但像所有其他尝试一样,它失败了。我确实有“成功”使用SCNAction将相机移出屏幕加上一个完成处理程序,只有在完成后才能实现更改。但是,这会将加载时间延长大约800%!最好有丑陋的“闪光”。

1 个答案:

答案 0 :(得分:0)

我有一些有用的东西,但我持怀疑态度。我创建了一个“nullCamera”,指向一个空的视野。在切换我的场景之前,我将该摄像机分配给SCNView。当新场景加载时,重新分配主摄像机。但我对这种做法感到紧张。

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