以下のようにSCNNodeにGIF画像を追加しています:
let plane = SCNPlane(width: 2, height: 2)
let bundleURL = Bundle.main.url(forResource: "engine", withExtension: "gif")
let animation : CAKeyframeAnimation = createGIFAnimation(url: bundleURL!)!
let layer = CALayer()
layer.bounds = CGRect(x: 0, y: 0, width: 900, height: 900)
layer.add(animation, forKey: "contents")
let tempView = UIView.init(frame: CGRect(x: 0, y: 0, width: 900, height: 900))
tempView.layer.bounds = CGRect(x: -450,
y: -450,
width: tempView.frame.size.width,
height: tempView.frame.size.height)
tempView.layer.addSublayer(layer)
let newMaterial = SCNMaterial()
newMaterial.isDoubleSided = true
newMaterial.diffuse.contents = tempView
plane.materials = [newMaterial]
let node = SCNNode(geometry: plane)
node.name = "engineGif"
let gifImagePosition = SCNVector3Make((self.virtualObjectInteraction.selectedObject?.childNodes[0].position.x)! + 2,
(self.virtualObjectInteraction.selectedObject?.childNodes[0].position.y)! + 4,
(self.virtualObjectInteraction.selectedObject?.childNodes[0].position.z)! - 2))
node.position = gifImagePosition
self.virtualObjectInteraction.selectedObject?.childNodes[0].addChildNode(node)
すべてが正常に見え、GIF 画像をアニメーションで表示できます。しかし、PopViewController メソッドを使用して前のビュー コントローラーに移動しようとすると、前の画面に移動できますが、画面がそこでフリーズし、ボタンのクリックが機能しません。
アプリをバックグラウンドにして再び来ると、すべてが意図したとおりに機能します。
ポップする前にGIF画像を削除しようとしましたが、まだ同じ問題があります。GIF 画像を追加しなければ、すべて正常に動作しています。問題はGIFを追加することだけであり、理由がわかりませんでしたか?