Swift - 使用UIImagePickerController从相册选择照片并展示
(本文代码已升级至Swift4)
1,UIImagePickerController介绍
2,下面通过一个样例,演示如何使用UIImagePickerController


由于苹果安全策略更新,在使用Xcode8开发时,需要在Info.plist配置请求照片相的关描述字段(Privacy - Photo Library Usage Description)
hangge_769.zip
1,UIImagePickerController介绍
(1)选择相册中的图片或者拍照,都是通过UIImagePickerController控制器实例化一个对象,然后通过self.present方法推送出界面显示。
(2)使用present的类需要实现UIImagePickerControllerDelegate,UINavigationControllerDelegate两个代理。
(3)UIImagePickerController可以通过isSourceTypeAvailable方法来判断设备是否支持照相机/图片库/相册功能。如果支持,可以通过sourceType属性来设置图片控制器的显示类型。
(1)点击“选择照片”,自动打开相册选择照片
(2)照片选中后,返回原界面并加载照片原图,同时控制台会打印照片的info信息
(3)如果选择照片前打开“编辑”开关,选中照片后会先进入照片编辑页面
3,效果图如下:





4,样例实现
(1)Info.plist配置由于苹果安全策略更新,在使用Xcode8开发时,需要在Info.plist配置请求照片相的关描述字段(Privacy - Photo Library Usage Description)

(2)样例代码如下:
源码下载:import UIKit class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { @IBOutlet weak var imageView: UIImageView! @IBOutlet weak var editSwitch: UISwitch! override func viewDidLoad() { super.viewDidLoad() } //选取相册 @IBAction func fromAlbum(_ sender: Any) { //判断设置是否支持图片库 if UIImagePickerController.isSourceTypeAvailable(.photoLibrary){ //初始化图片控制器 let picker = UIImagePickerController() //设置代理 picker.delegate = self //指定图片控制器类型 picker.sourceType = UIImagePickerController.SourceType.photoLibrary //设置是否允许编辑 picker.allowsEditing = editSwitch.isOn //弹出控制器,显示界面 self.present(picker, animated: true, completion: { () -> Void in }) }else{ print("读取相册错误") } } //选择图片成功后代理 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { //查看info对象 print(info) //显示的图片 let image:UIImage! if editSwitch.isOn { //获取编辑后的图片 image = info[.editedImage] as? UIImage }else{ //获取选择的原图 image = info[.originalImage] as? UIImage } imageView.image = image //图片控制器退出 picker.dismiss(animated: true, completion: { () -> Void in }) } }

[discovery] errors encountered while discovering extensions: Error Domain=PlugInKit Code=13 "query cancelled" UserInfo={NSLocalizedDescription=query cancelled}
图片最后不显示.报上面的错误.
航哥,上传的图片只能显示一张啊?又没有多图预览的功能呢?就和微信发朋友圈那样的???
如何实现多张选取?
文章写得太好了。请教一个问题,这个照片选择后,怎么进行裁切呢?
if self.imageView1.image == nil{
self.imageView1.image = image
}else{
self.imageView2.image = image
}用这个方法imageView1.image 就固定不变了,有什么方法可以改变 或者可以用多个按钮实现一对一选着图片
是同一个视图页面 有2个image 需要通过UIImagePickerController 来添加,如何实现。不是多张,谢谢站长
2个 imageView.image如何处理呢