tutorial español best app ios swift uiimagepickercontroller

ios - español - ¿Cómo permitir al usuario elegir la imagen con Swift?



siri shortcuts app (18)

Estoy escribiendo mi primera aplicación iOS (solo para iPhone) con Swift. La vista principal de la aplicación debe permitir al usuario elegir la imagen de la galería de fotos.

He encontrado el siguiente código de ejemplo de ViewController.swift :

class ViewController: UIImagePickerController, UINavigationControllerDelegate, UIImagePickerControllerDelegate { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { var imagePickerController = UIImagePickerController() imagePickerController.delegate = self imagePickerController.sourceType = UIImagePickerControllerSourceType.SavedPhotosAlbum imagePickerController.allowsEditing = true self.presentViewController(imagePickerController, animated: true, completion: { imageP in }) } func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: NSDictionary!) { let selectedImage : UIImage = image println(selectedImage) } }

y tener la siguiente escena del controlador de vista:

View Controller - Top Layout Guide - Bottom Layout Guide - View - Image View First Responder Exit

Pero cuando inicio la aplicación, solo se muestra la pantalla en negro. ¿Que estoy haciendo mal? Otro código de ejemplo que he encontrado está en Objective-C, que no me ayuda.


Aquí hay una manera fácil de hacerlo:

pero primero debe agregar (Privacidad - Descripción de uso de la biblioteca de fotos) en la lista de información, y debe tener un botón y un UIImageView en su viewController.

luego cree una salida de UIImageView (en este código, la salida se llama myImage) y una acción del botón (llamé a la acción importando en mi código)

import UIKit class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { override func viewDidLoad() { super.viewDidLoad() } @IBOutlet weak var myImage: UIImageView! @IBAction func importing(_ sender: Any) { let Picker = UIImagePickerController() Picker.delegate = self Picker.sourceType = .photoLibrary self.present(Picker, animated: true, completion: nil) Picker.allowsEditing = true Picker.mediaTypes = UIImagePickerController.availableMediaTypes(for: .photoLibrary)! } func imagePickerController(_ picker: UIImagePickerController,didFinishPickingMediaWithInfo info: [String : Any]) { let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage //1 myImage.contentMode = .scaleAspectFit //2 myImage.image = chosenImage //3 dismiss(animated:true, completion: nil) //4 } }


Complete el selector de imagen de trabajo de copiar y pegar para swift 4 basado en @ user3182143 respuesta:

import Foundation import UIKit class ImagePickerManager: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate { var picker = UIImagePickerController(); var alert = UIAlertController(title: "Choose Image", message: nil, preferredStyle: .actionSheet) var viewController: UIViewController? var pickImageCallback : ((UIImage) -> ())?; override init(){ super.init() } func pickImage(_ viewController: UIViewController, _ callback: @escaping ((UIImage) -> ())) { pickImageCallback = callback; self.viewController = viewController; let cameraAction = UIAlertAction(title: "Camera", style: .default){ UIAlertAction in self.openCamera() } let gallaryAction = UIAlertAction(title: "Gallary", style: .default){ UIAlertAction in self.openGallery() } let cancelAction = UIAlertAction(title: "Cancel", style: .cancel){ UIAlertAction in } // Add the actions picker.delegate = self alert.addAction(cameraAction) alert.addAction(gallaryAction) alert.addAction(cancelAction) alert.popoverPresentationController?.sourceView = self.viewController!.view viewController.present(alert, animated: true, completion: nil) } func openCamera(){ alert.dismiss(animated: true, completion: nil) if(UIImagePickerController .isSourceTypeAvailable(.camera)){ picker.sourceType = .camera self.viewController!.present(picker, animated: true, completion: nil) } else { let alertWarning = UIAlertView(title:"Warning", message: "You don''t have camera", delegate:nil, cancelButtonTitle:"OK", otherButtonTitles:"") alertWarning.show() } } func openGallery(){ alert.dismiss(animated: true, completion: nil) picker.sourceType = .photoLibrary self.viewController!.present(picker, animated: true, completion: nil) } func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { picker.dismiss(animated: true, completion: nil) } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { picker.dismiss(animated: true, completion: nil) let image = info[UIImagePickerControllerOriginalImage] as! UIImage pickImageCallback?(image) } // // For Swift 4.2 // func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { // picker.dismiss(animated: true, completion: nil) // guard let image = info[.originalImage] as? UIImage else { // fatalError("Expected a dictionary containing an image, but was provided the following: /(info)") // } // pickImageCallback?(image) // } @objc func imagePickerController(_ picker: UIImagePickerController, pickedImage: UIImage?) { } }

Llámalo desde tu controlador de vista así:

ImagePickerManager().pickImage(self){ image in //here is the image }

Además, no olvides incluir las siguientes claves en tu info.plist :

<key>NSCameraUsageDescription</key> <string>This app requires access to the camera.</string> <key>NSPhotoLibraryUsageDescription</key> <string>This app requires access to the photo library.</string>


En caso de no querer tener un botón separado, aquí hay otra manera. Se adjunta un gesto en imageView en sí mismo, donde en un toque de imagen aparecerá una alerta con dos opciones. Tendrá la opción de elegir entre la galería / biblioteca de fotos o cancelar la alerta.

import UIKit import CoreData class AddDetailsViewController: UIViewController, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate { @IBOutlet weak var imageView: UIImageView! var picker:UIImagePickerController? = UIImagePickerController() @IBAction func saveButton(sender: AnyObject) { let managedContext = (UIApplication.sharedApplication().delegate as? AppDelegate)!.managedObjectContext let entity = NSEntityDescription.entityForName("Person", inManagedObjectContext: managedContext) let person = Person(entity: entity!, insertIntoManagedObjectContext: managedContext) person.image = UIImageJPEGRepresentation(imageView.image!, 1.0) //imageView.image do { try person.managedObjectContext?.save() //people.append(person) } catch let error as NSError { print("Could not save /(error)") } } override func viewDidLoad() { super.viewDidLoad() let tapGesture = UITapGestureRecognizer(target: self, action: #selector(AddDetailsViewController.tapGesture(_:))) imageView.addGestureRecognizer(tapGesture) imageView.userInteractionEnabled = true picker?.delegate = self // Do any additional setup after loading the view. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func tapGesture(gesture: UIGestureRecognizer) { let alert:UIAlertController = UIAlertController(title: "Profile Picture Options", message: nil, preferredStyle: UIAlertControllerStyle.ActionSheet) let gallaryAction = UIAlertAction(title: "Open Gallary", style: UIAlertActionStyle.Default) { UIAlertAction in self.openGallary() } let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel) { UIAlertAction in self.cancel() } alert.addAction(gallaryAction) alert.addAction(cancelAction) self.presentViewController(alert, animated: true, completion: nil) } func openGallary() { picker!.allowsEditing = false picker!.sourceType = UIImagePickerControllerSourceType.PhotoLibrary presentViewController(picker!, animated: true, completion: nil) } func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage { imageView.contentMode = .ScaleAspectFit imageView.image = pickedImage } dismissViewControllerAnimated(true, completion: nil) } func cancel(){ print("Cancel Clicked") } }

Agregando más a la pregunta, implementó la lógica para almacenar imágenes en CoreData.


Haga esto para mostrar las imágenes de la biblioteca de fotos con una codificación rápida:

var pkcrviewUI = UIImagePickerController() if UIImagePickerController .isSourceTypeAvailable(UIImagePickerControllerSourceType.PhotoLibrary) { pkcrviewUI.sourceType = UIImagePickerControllerSourceType.PhotoLibrary pkcrviewUI.allowsEditing = true pkcrviewUI.delegate = self [self .presentViewController(pkcrviewUI, animated: true , completion: nil)] }


Intente esto, es fácil ... hacer una foto con UIImagePickerControllerDelegate

@objc func masterAction(_ sender: UIButton) { if UIImagePickerController.isSourceTypeAvailable(.savedPhotosAlbum){ print("Button capture") imagePicker.delegate = self imagePicker.sourceType = .savedPhotosAlbum; imagePicker.allowsEditing = false self.present(imagePicker, animated: true, completion: nil) } print("hello i''m touch /(sender.tag)") } func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { dismiss(animated: true, completion: nil) } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { if let chosenImage = info[UIImagePickerControllerOriginalImage] as? UIImage { print("Get Image /(chosenImage)") ImageList.insert(chosenImage, at: 0) ArrayList.insert("", at: 0) Collection_Vw.reloadData() } else{ print("Something went wrong") } self.dismiss(animated: true, completion: nil) }


Le daré la mejor codificación comprensible para elegir la imagen, consulte esto

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { var alert:UIAlertController=UIAlertController(title: "Choose Image", message: nil, preferredStyle: UIAlertControllerStyle.ActionSheet) var cameraAction = UIAlertAction(title: "Camera", style: UIAlertActionStyle.Default) { UIAlertAction in self.openCamera() } var gallaryAction = UIAlertAction(title: "Gallary", style: UIAlertActionStyle.Default) { UIAlertAction in self.openGallary() } var cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel) { UIAlertAction in } // Add the actions picker?.delegate = self alert.addAction(cameraAction) alert.addAction(gallaryAction) alert.addAction(cancelAction) self.presentViewController(alert, animated: true, completion: nil) } func openCamera() { if(UIImagePickerController .isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera)) { picker!.sourceType = UIImagePickerControllerSourceType.Camera self .presentViewController(picker!, 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() { picker!.sourceType = UIImagePickerControllerSourceType.PhotoLibrary self.presentViewController(picker!, animated: true, completion: nil) } //PickerView Delegate Methods func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) { picker .dismissViewControllerAnimated(true, completion: nil) imageView.image=info[UIImagePickerControllerOriginalImage] as? UIImage } func imagePickerControllerDidCancel(picker: UIImagePickerController) { println("picker cancel.") }

Que tengas un buen día:-)


Para Swift 3

1- Primero debe agregar la siguiente clave en info.plist

<key>NSPhotoLibraryUsageDescription</key> <string>This app requires access to the photo library.</string>

2- Su controlador de vista debe cumplir los siguientes protocolos UIImagePickerControllerDelegate, UINavigationControllerDelegate.

class ImagePickerViewController: UIViewController,UIImagePickerControllerDelegate, UINavigationControllerDelegate {}

3-necesita declarar el UIImage que se usará para enlazar la imagen devuelta / seleccionada

@IBOutlet weak var myImageView: UIImageView! @IBoutlet weak var upLoadImageBtn:UIImage! let imagePicker = UIImagePickerController()

4- Establezca el delegado pickerImage para que sea su ViewController

imagePicker.delegate = self

5- Para el botón de carga, tendrá que gustar a la siguiente imagen para disparar la acción y mostrar el selector de imagen

@IBAction func upLoadImageBtnPressed(_ sender: AnyObject) { imagePicker.allowsEditing = false imagePicker.sourceType = .photoLibrary /* The sourceType property wants a value of the enum named UIImagePickerControllerSourceType, which gives 3 options: UIImagePickerControllerSourceType.PhotoLibrary UIImagePickerControllerSourceType.Camera UIImagePickerControllerSourceType.SavedPhotosAlbum */ present(imagePicker, animated: true, completion: nil) }

6- Su View Controller necesita implementar los métodos de delegado para los delegados del selector de imagen

// MARK: - ImagePicker Delegate func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage { myImageView.contentMode = .scaleAspectFit myImageView.image = pickedImage } /* Swift Dictionary named “info”. We have to unpack it from there with a key asking for what media information we want. We just want the image, so that is what we ask for. For reference, the available options are: UIImagePickerControllerMediaType UIImagePickerControllerOriginalImage UIImagePickerControllerEditedImage UIImagePickerControllerCropRect UIImagePickerControllerMediaURL UIImagePickerControllerReferenceURL UIImagePickerControllerMediaMetadata */ dismiss(animated: true, completion: nil) } func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { dismiss(animated: true, completion:nil) }

Te deseo un día maravilloso :)


Para Swift 3.4.1, este código está funcionando:

implements class AddAdvertisementViewController : UINavigationControllerDelegate, UIImagePickerControllerDelegate, UIActionSheetDelegate var imagePicker = UIImagePickerController() var file :UIImage! //action sheet tap on image func tapOnButton(){ let optionMenu = UIAlertController(title: nil, message: "Add Photo", preferredStyle: .actionSheet) let galleryAction = UIAlertAction(title: "Gallery", style: .default, handler:{ (alert: UIAlertAction!) -> Void in self.addImageOnTapped() }) let cameraAction = UIAlertAction(title: "Camera", style: .default, handler:{ (alert: UIAlertAction!) -> Void in self.openCameraButton() }) let cancleAction = UIAlertAction(title: "Cancel", style: .cancel, handler:{ (alert: UIAlertAction!) -> Void in print("Cancel") }) optionMenu.addAction(galleryAction) optionMenu.addAction(cameraAction) optionMenu.addAction(cancleAction) self.present(optionMenu, animated: true, completion: nil) } func openCameraButton(){ if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera) { imagePicker = UIImagePickerController() imagePicker.delegate = self imagePicker.sourceType = UIImagePickerControllerSourceType.camera; imagePicker.allowsEditing = true self.present(imagePicker, animated: true, completion: nil) } } func addImageOnTapped(){ if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary){ imagePicker.delegate = self imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary; imagePicker.allowsEditing = true self.present(imagePicker, animated: true, completion: nil) } } //picker pick image and store value imageview func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]){ if let image = info[UIImagePickerControllerOriginalImage] as? UIImage { file = image imgViewOne.image = image imagePicker.dismiss(animated: true, completion: nil); } }


Por supuesto, las respuestas anteriores resuelven el problema principal.

Me enfrenté a un accidente en Swift 3.0 al lanzar el álbum de fotos porque Info.plist no tenía estas banderas:

  1. Privacidad - Descripción del uso de la biblioteca de fotos -> NSPhotoLibraryUsageDescription

  2. Privacidad - Descripción del uso de la cámara -> NSCameraUsageDescription

El

Por favor agrégalos si te enfrentas a un problema similar.

Gracias !


Sé que esta pregunta tiene un año de antigüedad, pero aquí hay un código bastante simple (principalmente de este tutorial ) que funciona bien para mí:

import UIKit class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { @IBOutlet weak var imageView: UIImageView! var imagePicker = UIImagePickerController() override func viewDidLoad() { super.viewDidLoad() self.imagePicker.delegate = self } @IBAction func loadImageButtonTapped(sender: AnyObject) { print("hey!") self.imagePicker.allowsEditing = false self.imagePicker.sourceType = .SavedPhotosAlbum self.presentViewController(imagePicker, animated: true, completion: nil) } func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) { if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage { self.imageView.contentMode = .ScaleAspectFit self.imageView.image = pickedImage } dismissViewControllerAnimated(true, completion: nil) } func imagePickerControllerDidCancel(picker: UIImagePickerController) { self.imagePicker = UIImagePickerController() dismissViewControllerAnimated(true, completion: nil) }


Si desea seleccionar solo la imagen normal, puede utilizar el siguiente código, que verifica que la imagen seleccionada no sea una imagen panorámica.

let picker = UIImagePickerController() func photoFromLibrary() { self.picker.allowsEditing = true self.picker.sourceType = .photoLibrary //picker.mediaTypes = UIImagePickerController.availableMediaTypes(for: .photoLibrary)! self.present(self.picker, animated: true, completion: nil) } func shootPhoto() { if UIImagePickerController.isSourceTypeAvailable(.camera) { self.picker.allowsEditing = true self.picker.sourceType = UIImagePickerControllerSourceType.camera self.picker.cameraCaptureMode = .photo self.picker.modalPresentationStyle = .fullScreen self.present(self.picker,animated: true,completion: nil) } } //Image picker delegate func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { let str = "/(info["UIImagePickerControllerOriginalImage"]!)" let s = str.slice(from: "{", to: "}") if let arr = s?.components(separatedBy: ","){ if arr.count >= 2 { if Int(arr[0])! > 11000 { picker.dismiss(animated:true, completion: nil) self.makeToast("Invalid Image!!!") return } } } } if let image = info[UIImagePickerControllerOriginalImage] as? UIImage{ self.UserImageView.image = image } picker.dismiss(animated:true, completion: nil) } func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { picker.dismiss(animated: true, completion: nil) }


Si solo desea que el usuario elija la imagen con UIImagePickerController use este código:

import UIKit class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate { @IBOutlet var imageView: UIImageView! @IBOutlet var chooseBuuton: UIButton! var imagePicker = UIImagePickerController() @IBAction func btnClicked() { if UIImagePickerController.isSourceTypeAvailable(.savedPhotosAlbum){ print("Button capture") imagePicker.delegate = self imagePicker.sourceType = .savedPhotosAlbum; imagePicker.allowsEditing = false self.present(imagePicker, animated: true, completion: nil) } } func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: NSDictionary!){ self.dismiss(animated: true, completion: { () -> Void in }) imageView.image = image } }


Solo respondo aquí para mencionar: info[UIImagePickerControllerEditedImage] es probablemente la que desea usar en la mayoría de los casos.

Aparte de eso, las respuestas son completas.


haga clic en el botón y abra la Galería de imágenes y configure la imagen en imageview swift 3.0

agregar tres delegados UIImagePickerControllerDelegate, UIPopoverControllerDelegate, UINavigationControllerDelegate

var picker:UIImagePickerController?=UIImagePickerController() @IBOutlet var imgPhoto: UIImageView! override func viewDidLoad() { super.viewDidLoad() picker?.delegate=self } @IBAction func btnAddPhotoClicked(_ sender: UIButton) { openGallary() } func openGallary() { picker!.allowsEditing = false picker!.sourceType = UIImagePickerControllerSourceType.photoLibrary present(picker!, animated: true, completion: nil) } //MARK:- ImagePicker Controller Delegate //MARK:- func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { dismiss(animated: true, completion: nil) } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { if let chosenImage = info[UIImagePickerControllerOriginalImage] as? UIImage { imgPhoto.contentMode = .scaleToFill imgPhoto.image = chosenImage } else{ print("Something went wrong") } self.dismiss(animated: true, completion: nil) }


Para Swift 4
¡Este código funciona para mí!

import UIKit class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate { @IBOutlet var imageView: UIImageView! @IBOutlet var chooseBuuton: UIButton! var imagePicker = UIImagePickerController() override func viewDidLoad() { super.viewDidLoad() imagePicker.delegate = self } @IBAction func btnClicked() { if UIImagePickerController.isSourceTypeAvailable(.savedPhotosAlbum) { print("Button capture") imagePicker.sourceType = .savedPhotosAlbum; imagePicker.allowsEditing = false self.present(imagePicker, animated: true, completion: nil) } } @objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage imageView.image = chosenImage dismiss(animated: true, completion: nil) } }


XCODE 10.1 / SWIFT 4.2:

  1. Agregue los permisos requeridos (otros mencionados)

  2. Agrega esta clase a tu vista:

import UIKit import Photos import Foundation class UploadImageViewController: UIViewController, UIImagePickerControllerDelegate , UINavigationControllerDelegate { @IBOutlet weak var imgView: UIImageView! let imagePicker = UIImagePickerController() override func viewDidLoad() { super.viewDidLoad() checkPermission() imagePicker.delegate = self imagePicker.allowsEditing = false imagePicker.sourceType = .photoLibrary } @IBAction func btnSetProfileImageClickedCamera(_ sender: UIButton) { } @IBAction func btnSetProfileImageClickedFromGallery(_ sender: UIButton) { self.selectPhotoFromGallery() } func selectPhotoFromGallery() { self.present(imagePicker, animated: true, completion: nil) } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { if let pickedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage { self.imgView.contentMode = .scaleAspectFit self.imgView.image = pickedImage } dismiss(animated: true, completion: nil) } func imagePickerControllerDidCancel(_ picker: UIImagePickerController){ print("cancel is clicked") } func checkPermission() { let photoAuthorizationStatus = PHPhotoLibrary.authorizationStatus() switch photoAuthorizationStatus { case .authorized: print("Access is granted by user") case .notDetermined: PHPhotoLibrary.requestAuthorization({ (newStatus) in print("status is /(newStatus)") if newStatus == PHAuthorizationStatus.authorized { /* do stuff here */ print("success") } }) print("It is not determined until now") case .restricted: // same same print("User do not have access to photo album.") case .denied: // same same print("User has denied the permission.") } } }


Xcode 10, Swift 4.2

A continuación se muestra una versión ligeramente optimizada de la implementación. Esto está en Swift 4.2 y lo he probado también.

Puedes ver el código completo de ViewController aquí. Tenga en cuenta que debe definir un IBOutlet (imageView) y IBAction (didTapOnChooseImageButton) definido y conectado también en el guión gráfico. Espero que esto ayude.

import UIKit class ImagePickViewController: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate { var imagePicker = UIImagePickerController() @IBOutlet weak var imageView: UIImageView! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } @IBAction func didTapOnChooseImageButton(_ sender: Any) { let alert:UIAlertController=UIAlertController(title: "Choose Image", message: nil, preferredStyle: UIAlertController.Style.actionSheet) let cameraAction = UIAlertAction(title: "Camera", style: UIAlertAction.Style.default) { UIAlertAction in self.openCamera(UIImagePickerController.SourceType.camera) } let gallaryAction = UIAlertAction(title: "Gallary", style: UIAlertAction.Style.default) { UIAlertAction in self.openCamera(UIImagePickerController.SourceType.photoLibrary) } let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertAction.Style.cancel) { UIAlertAction in } // Add the actions imagePicker.delegate = self as UIImagePickerControllerDelegate & UINavigationControllerDelegate alert.addAction(cameraAction) alert.addAction(gallaryAction) alert.addAction(cancelAction) self.present(alert, animated: true, completion: nil) } func openCamera(_ sourceType: UIImagePickerController.SourceType) { imagePicker.sourceType = sourceType self.present(imagePicker, animated: true, completion: nil) } //MARK:UIImagePickerControllerDelegate func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { imageView.image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage imagePicker.dismiss(animated: true, completion: nil) } func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { print("imagePickerController cancel") } }


@IBAction func chooseProfilePicBtnClicked(sender: AnyObject) { let alert:UIAlertController=UIAlertController(title: "Choose Image", message: nil, preferredStyle: UIAlertControllerStyle.ActionSheet) let cameraAction = UIAlertAction(title: "Camera", style: UIAlertActionStyle.Default) { UIAlertAction in self.openCamera() } let gallaryAction = UIAlertAction(title: "Gallary", style: UIAlertActionStyle.Default) { UIAlertAction in self.openGallary() } let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel) { UIAlertAction in } // Add the actions picker.delegate = self alert.addAction(cameraAction) alert.addAction(gallaryAction) alert.addAction(cancelAction) self.presentViewController(alert, animated: true, completion: nil) } func openCamera(){ if(UIImagePickerController .isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera)){ picker.sourceType = UIImagePickerControllerSourceType.Camera self .presentViewController(picker, animated: true, completion: nil) }else{ let alert = UIAlertView() alert.title = "Warning" alert.message = "You don''t have camera" alert.addButtonWithTitle("OK") alert.show() } } func openGallary(){ picker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary self.presentViewController(picker, animated: true, completion: nil) } //MARK:UIImagePickerControllerDelegate func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]){ picker .dismissViewControllerAnimated(true, completion: nil) imageViewRef.image=info[UIImagePickerControllerOriginalImage] as? UIImage } func imagePickerControllerDidCancel(picker: UIImagePickerController){ print("picker cancel.") }