PlaygroundSupportでSceneKitの画面を表示する

みなさん、Xcodeのプレビュー機能は使いこなしていますか? 私の環境では、プレビュー画面が表示されないことが時々あります。

作業しながらSafariのタブを数百ページくらい開いていることもあるので、メモリー不足だとはおもうんですが。

Xcodeを再起動したら治るのかもしれないけど、治らないかもしれないし。まあ、だいたいの場合は直らないんですよね……。

ということで、せっかくiPadもあるので、iPadのPlaygroundでプレビューを表示されてみましょう。それならMacでいくらメモリーを使っていても影響されないですから。

PlaygroundSupportとは

PlaygroundSupportは、Playgroundアプリ単体などで画面を表示することができるようにするサポートライブラリです。

UIViewやNSViewはもちろん、UIViewControllerなどもそのまま表示できるようになります。

ここでは、負荷が重そうなSceneKitのSCNViewを表示してみることにしましょう。

SCNViewの表示

まずは、PlaygroundSupportを使うので、importをしておきましょう。

それから、表示したいView(ここではSCNView)を作って、それをPlaygroundPage.current.liveViewに設定するだけ。

import PlaygroundSupport

// 表示用のSCNViewを作る。
var sceneView = SCNView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
var scene = SCNScene()
sceneView.scene = scene

// PlaygroundPageに作ったSCNViewを設定。
PlaygroundPage.current.liveView = sceneView
PlaygroundPage.current.needsIndefiniteExecution = true

// あとは適当に画面のパーツを作ってsceneに追加してください。

できたPlaygroundファイルを iCloud Drive の Playgroundsフォルダーにコピーすれば、iPadのPlaygroundアプリから開いて動作確認ができます。

f:id:toyship:20210724234230p:plain
PlaygroundSupport

これでMacでどんな重い処理が走っていてもプレビューできますね。

全コード

全部のソースコードはこちら。 (iPadのPlaygroundアプリにそのままコピペすれば使えます。)