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

Swift4中无需UIImageView如何拍摄并保存照片

直接保存拍摄照片到相册(跳过UIImageView)

很简单,我们只需要移除和UIImageView相关的代码,在拍照完成后的代理方法里直接调用系统API把照片保存到相册就行。下面是修改后的完整代码:

import UIKit

class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
    var imagePicker: UIImagePickerController!

    // 移除不需要的UIImageView关联
    // @IBOutlet weak var imageTake: UIImageView!

    @IBAction func takePhoto(_ sender: AnyObject) {
        imagePicker = UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.sourceType = .camera
        
        // 先判断设备是否支持相机
        if UIImagePickerController.isSourceTypeAvailable(.camera) {
            present(imagePicker, animated: true, completion: nil)
        } else {
            let alert = UIAlertController(title: "提示", message: "当前设备不支持相机功能", preferredStyle: .alert)
            alert.addAction(UIAlertAction(title: "确定", style: .default))
            present(alert, animated: true)
        }
    }

    // 拍照完成后的代理回调
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        // 从返回信息中提取拍摄的原图
        guard let takenImage = info[.originalImage] as? UIImage else {
            picker.dismiss(animated: true)
            return
        }
        
        // 直接调用系统API保存图片到相册
        UIImageWriteToSavedPhotosAlbum(takenImage, self, #selector(imageSaved(_:didFinishSavingWithError:contextInfo:)), nil)
        
        // 关闭相机界面
        picker.dismiss(animated: true)
    }

    // 相册保存结果的回调方法
    @objc func imageSaved(_ image: UIImage, didFinishSavingWithError error: Error?, contextInfo: UnsafeRawPointer) {
        let alert: UIAlertController
        if let error = error {
            alert = UIAlertController(title: "保存失败", message: error.localizedDescription, preferredStyle: .alert)
        } else {
            alert = UIAlertController(title: "保存成功", message: "照片已保存到相册", preferredStyle: .alert)
        }
        alert.addAction(UIAlertAction(title: "确定", style: .default))
        present(alert, animated: true)
    }

    // 取消拍照的处理
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        picker.dismiss(animated: true)
    }
}

关键细节提醒:

  • 移除无用关联:直接删掉原来的@IBOutlet weak var imageTake: UIImageView!,因为我们不需要再显示图片了。
  • 权限配置:一定要在Info.plist中添加NSPhotoLibraryAddUsageDescription键,值填写向用户说明的权限用途(比如“需要访问相册以保存拍摄的照片”),否则iOS会直接阻止保存操作。
  • 结果反馈:通过UIImageWriteToSavedPhotosAlbum的回调方法,我们可以给用户展示保存成功/失败的提示,提升体验。

这样修改后,用户点击拍照按钮拍完照片,就会自动把照片保存到相册,完全跳过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:04:01