You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:33:51