swift Сделайте снимок и сохраните его в библиотеке фотографий

Я искал и не мог найти ответ на этот вопрос. У меня есть кнопка «сфотографировать», и при нажатии она открывает камеру, вы делаете снимок, и когда вы выбираете «Использовать фотографию», я хочу, чтобы она была сохранена в библиотеке фотографий.
Я могу сделать все, кроме сохранения в библиотеке, может кто-то помочь?

это код, который я должен открыть для камеры: введите описание изображения здесь

Используйте приведенный ниже код для изображения, взятого из фотоальбома, и сохраните внутри библиотеки фотографий.

Поддержка кода для версии Swift 3.1 и 4.0 :

Во-первых, мы должны выполнить настройку для разрешений в файле .plist проекта: –

1) Камера

NSCameraUsageDescription This app will use camera. 

2) Библиотека фотографий

 NSPhotoLibraryUsageDescription You can select photos to attach to reports. 

3) Сохранить в библиотеке фотографий

 NSPhotoLibraryAddUsageDescription Please allow access to save photo in your photo library 

Нам нужно открыть .pilst- файл как тип исходного кода, а затем добавить разрешения внутри –

открыть файл .plist


После этого


 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 3.0

 class PhotoViewController: UIViewController, UIGestureRecognizerDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate 

создайте свои UIImageView и UIImagePickerController

 @IBOutlet weak var userPhotoImageView: UIImageView! var pickerController = UIImagePickerController() var imageView = UIImage() 

Здесь я использую tapgesture для нажатия на UIImageView

  in viewDidLoad let imageTapGesture = UITapGestureRecognizer(target: self, action: #selector(tapUserPhoto(_:))) imageTapGesture.delegate = self userPhotoImageView.addGestureRecognizer(imageTapGesture) imageTapGesture.numberOfTapsRequired = 1 userPhotoImageView.isUserInteractionEnabled = true pickerController.delegate = self func tapUserPhoto(_ sender: UITapGestureRecognizer){ let alertViewController = UIAlertController(title: "", message: "Choose your option", preferredStyle: .actionSheet) let camera = UIAlertAction(title: "Camera", style: .default, handler: { (alert) in self.openCamera() }) let gallery = UIAlertAction(title: "Gallery", style: .default) { (alert) in self.openGallary() } let cancel = UIAlertAction(title: "Cancel", style: .cancel) { (alert) in } alertViewController.addAction(camera) alertViewController.addAction(gallery) alertViewController.addAction(cancel) self.present(alertViewController, animated: true, completion: nil) } func openCamera() { if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera) { pickerController.delegate = self self.pickerController.sourceType = UIImagePickerControllerSourceType.camera pickerController.allowsEditing = true self .present(self.pickerController, animated: true, completion: nil) } else { let alertWarning = UIAlertView(title:"Warning", message: "You don't have camera", delegate:nil, cancelButtonTitle:"OK", otherButtonTitles:"") alertWarning.show() } } func openGallary() { if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary) { pickerController.delegate = self pickerController.sourceType = UIImagePickerControllerSourceType.photoLibrary pickerController.allowsEditing = true self.present(pickerController, animated: true, completion: nil) } } public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { imageView = info[UIImagePickerControllerEditedImage] as! UIImage userPhotoImageView.contentMode = .scaleAspectFill userPhotoImageView.image = imageView dismiss(animated:true, completion: nil) } public func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { print("Cancel") } 
 import UIKit class photoPickerController: UIViewController,UINavigationControllerDelegate{ @IBOutlet weak var imageTake: UIImageView! var imagePicker: UIImagePickerController! override func viewDidLoad() { super.viewDidLoad() } @IBAction func takePhoto(_ sender: UIButton) { imagePicker = UIImagePickerController() imagePicker.delegate = self imagePicker.sourceType = .camera present(imagePicker, animated: true, completion: nil) } @IBAction func saveToLibrary(_ sender: AnyObject) { UIImageWriteToSavedPhotosAlbum(imageTake.image!, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil) } } extension photoPickerController : UIImagePickerControllerDelegate { func image(_ image: UIImage, didFinishSavingWithError error: Error?, contextInfo: UnsafeRawPointer) { if let error = error { // we got back an error! let alert = UIAlertController(title: "Error", message: error.localizedDescription, preferredStyle: .alert) alert.addAction(UIAlertAction(title: "OK", style: .default)) present(alert, animated: true) } else { let alert = UIAlertController(title: "Saved!", message: "Image saved successfully", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "OK", style: .default)) present(alert, animated: true) } } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { imagePicker.dismiss(animated: true, completion: nil) imageTake.image = info[UIImagePickerControllerOriginalImage] as? UIImage } } 

Ответ Anand Nimje обновлен для Swift 4

 class ImageCaptureViewController: UIViewController,UINavigationControllerDelegate, UIImagePickerControllerDelegate { @IBOutlet weak var takeImage: UIImageView! var imagePicker: UIImagePickerController! @IBAction func takePhoto(_ sender: UIButton) { imagePicker = UIImagePickerController() imagePicker.delegate = self imagePicker.sourceType = .camera present(imagePicker, animated: true, completion: nil) } @IBAction func savePhoto(_ sender: UIButton) { UIImageWriteToSavedPhotosAlbum(takeImage.image!, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil) } @objc func image(_ image: UIImage, didFinishSavingWithError error: Error?, contextInfo: UnsafeRawPointer) { if let error = 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) } } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { imagePicker.dismiss(animated: true, completion: nil) takeImage.image = info[UIImagePickerControllerOriginalImage] as? UIImage } } 
  • Куда dispatch_once в Swift 3?
  • Как получить время (час, минута, секунда) в Swift 3 с помощью NSDate?
  • Добавьте водяной знак в видео после объединения видео и аудио активов в один из Swift3 iOS
  • Shuffle array swift 3
  • Каковы новые слова «for», «at», «in» в объявлениях Swift3?
  • Swift 3 некорректная строковая интерполяция с неявно развернутыми опциями
  • Что такое ключевое слово open в Swift?
  • Почему «nil» не совместим с «UnsafePointer » в Swift 3?
  • попробуйте, попробуйте! & пытаться? какая разница, и когда использовать их?
  • Экспресс для быстрых циклов с динамическим диапазоном
  • Xcode 8 / Swift 3: простой код UIPicker не работает
  • Давайте будем гением компьютера.