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
相关产品推荐
相关产品推荐

