2016-03-04 77 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? (我似乎無法使用代碼)