我一直在寻找,但无法找到答案.我有一个按钮“拍照”,当按下时,它打开相机,你拍照,当你选择“使用照片”,我希望它保存到照片库. 我可以做除了保存到图书馆以外的所有人,有人可以帮
我可以做除了保存到图书馆以外的所有人,有人可以帮忙吗?
这是我打开相机的代码:
Code Support for Swift 3.1 & 4.0 version:
首先,我们必须在Project的.plist文件中进行权限设置: –
1)相机
<key>NSCameraUsageDescription</key> <string>This app will use camera.</string>
2)图片库
<key>NSPhotoLibraryUsageDescription</key> <string>You can select photos to attach to reports.</string>
3)保存到照片库
<key>NSPhotoLibraryAddUsageDescription</key> <string>Please allow access to save photo in your photo library</string>
我们需要打开.pilst文件作为源代码类型,然后在里面添加权限 –
之后
import UIKit class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate { @IBOutlet weak var imageTake: UIImageView! var imagePicker: UIImagePickerController! override func viewDidLoad() { super.viewDidLoad() } //MARK: - Take image @IBAction func takePhoto(_ sender: UIButton) { imagePicker = UIImagePickerController() imagePicker.delegate = self imagePicker.sourceType = .camera present(imagePicker, animated: true, completion: nil) } //MARK: - Saving Image here @IBAction func save(_ sender: AnyObject) { UIImageWriteToSavedPhotosAlbum(imageTake.image!, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil) } //MARK: - Add image to Library func image(_ image: UIImage, didFinishSavingWithError error: Error?, contextInfo: UnsafeRawPointer) { if let error = error { // we got back an error! let ac = UIAlertController(title: "Save error", message: error.localizedDescription, preferredStyle: .alert) ac.addAction(UIAlertAction(title: "OK", style: .default)) present(ac, animated: true) } else { let ac = UIAlertController(title: "Saved!", message: "Your altered image has been saved to your photos.", preferredStyle: .alert) ac.addAction(UIAlertAction(title: "OK", style: .default)) present(ac, animated: true) } } //MARK: - Done image capture here func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { imagePicker.dismiss(animated: true, completion: nil) imageTake.image = info[UIImagePickerControllerOriginalImage] as? UIImage } }
Swift 4.2 Code update –
class ViewController: UIViewController, UINavigationControllerDelegate { @IBOutlet weak var imageTake: UIImageView! var imagePicker: UIImagePickerController! enum ImageSource { case photoLibrary case camera } override func viewDidLoad() { super.viewDidLoad() } //MARK: - Take image @IBAction func takePhoto(_ sender: UIButton) { guard UIImagePickerController.isSourceTypeAvailable(.camera) else { selectImageFrom(.photoLibrary) return } selectImageFrom(.camera) } func selectImageFrom(_ source: ImageSource){ imagePicker = UIImagePickerController() imagePicker.delegate = self switch source { case .camera: imagePicker.sourceType = .camera case .photoLibrary: imagePicker.sourceType = .photoLibrary } present(imagePicker, animated: true, completion: nil) } //MARK: - Saving Image here @IBAction func save(_ sender: AnyObject) { guard let selectedImage = imageTake.image else { print("Image not found!") return } UIImageWriteToSavedPhotosAlbum(selectedImage, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil) } //MARK: - Add image to Library @objc func image(_ image: UIImage, didFinishSavingWithError error: Error?, contextInfo: UnsafeRawPointer) { if let error = error { // we got back an error! showAlertWith(title: "Save error", message: error.localizedDescription) } else { showAlertWith(title: "Saved!", message: "Your image has been saved to your photos.") } } func showAlertWith(title: String, message: String){ let ac = UIAlertController(title: title, message: message, preferredStyle: .alert) ac.addAction(UIAlertAction(title: "OK", style: .default)) present(ac, animated: true) } } extension ViewController: UIImagePickerControllerDelegate{ func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]){ imagePicker.dismiss(animated: true, completion: nil) guard let selectedImage = info[.originalImage] as? UIImage else { print("Image not found!") return } imageTake.image = selectedImage } }