Swift 4中如何直接将ARKit快照保存至相册(跳过UIImageView)
解决方案
要实现拍摄ARKit快照后直接自动保存到相册,无需显示在UIImageView中,咱们直接调整代码逻辑就行:
步骤1:移除无用的UIImageView引用
首先删掉代码中与显示相关的UIImageViewIBOutlet,因为我们不再需要展示快照了:
// 删掉这一行:@IBOutlet var cryMeARiver: UIImageView!
步骤2:修改快照保存逻辑
在place方法里,获取快照后直接调用系统相册保存方法,同时添加回调处理保存结果(成功/失败都给用户反馈会更友好):
@IBOutlet weak var augmentedRealityView: ARSCNView! @IBAction func place(_ sender: Any) { // 获取ARKit场景的快照 let snapshotImage = augmentedRealityView.snapshot() // 直接将快照保存到系统相册 UIImageWriteToSavedPhotosAlbum( snapshotImage, self, #selector(saveCompletionHandler(_:didFinishSavingWithError:contextInfo:)), nil ) } // 相册保存完成的回调方法,处理结果反馈 @objc private func saveCompletionHandler( _ image: UIImage, didFinishSavingWithError error: Error?, contextInfo: UnsafeRawPointer ) { if let saveError = error { // 保存失败,这里可以弹窗提示用户 let alert = UIAlertController(title: "保存失败", message: saveError.localizedDescription, preferredStyle: .alert) alert.addAction(UIAlertAction(title: "确定", style: .default)) present(alert, animated: true) } else { // 保存成功,告知用户结果 let alert = UIAlertController(title: "保存成功", message: "ARKit快照已存入你的相册", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "确定", style: .default)) present(alert, animated: true) } }
步骤3:配置相册访问权限
iOS要求访问相册必须向用户说明理由,所以要在项目的Info.plist文件中添加以下键值对:
- 键:
Privacy - Photo Library Additions Usage Description(原始键值为NSPhotoLibraryAddUsageDescription) - 值:填写访问原因,比如
"需要保存ARKit场景快照到你的相册"
这样修改后,用户点击按钮时,程序会直接把ARKit快照存入系统相册,完全跳过UIImageView显示步骤,还能给用户清晰的保存结果反馈。
内容的提问来源于stack exchange,提问作者user8105388
相关产品推荐
相关产品推荐

