[swift] scenekit / Screenshotを取得してライブラリに保存する方法
scenekit / Screenshotを取得してライブラリに保存する方法は以下の通り
scenekitでは通常通りのScreenshotの取得方法でレンダリングされたシーンが取得できないため、SceneViewで用意されているsnapshot()を使用する
前準備として、info.plistに「Privacy – Photo Library Usage Description」に使用理由を記述しておくこと
import UIKit import SceneKit class GameViewController: UIViewController { @IBOutlet var scnView: SCNView! override func viewDidLoad() { super.viewDidLoad() //シーンの前準備は省略 } // セーブを行う @IBAction func saveImage() { let targetImage = scnView.snapshot() as UIImage // UIImage の画像をカメラロールに画像を保存 UIImageWriteToSavedPhotosAlbum(targetImage, self, #selector(self.showResultOfSaveImage(_:didFinishSavingWithError:contextInfo:)), nil) } // 保存を試みた結果をダイアログで表示 @objc func showResultOfSaveImage(_ image: UIImage, didFinishSavingWithError error: NSError!, contextInfo: UnsafeMutableRawPointer) { var title = "Completed" var message = "Completed to save on Liblary" if error != nil { title = "Error" message = "Fail to save" } let alert = UIAlertController(title: title, message: message, preferredStyle: .alert) // OKボタンを追加 alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler:{ (action:UIAlertAction!) -> Void in print("save") })) // UIAlertController を表示 self.present(alert, animated: true, completion: nil) } }