基于Swift的iOS应用程序开发:使用UIImagePickerController从相册选择图片
来源:互联网 发布:手机日记本数据库表 编辑:程序博客网 时间:2024/05/17 22:18
一、设置系统权限
这一点非常重要,找到工程内的info.plist文件,在其中添加以下项:
Privacy - Photo Library Usage Description为你添加的项设置Type为String,然后在Value一列中输入一句话,可以任意输入,这句话旨在提醒用户我们需要获得使用摄像头的权限:
二、实现/继承代理
调取系统相册需要用到以下两个系统代理:
UIImagePickerControllerDelegateUINavigationControllerDelegate所以我们的ViewController需要实现这两个代理:
import UIKitclass DemoTakePhotoViewController: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate {//...}
三、编写方法,调取系统相册
调取摄像头其实就是呼出一个系统已定义的ViewController:UIImagePickerController具体使用该ViewController的方式如下:
let photoPickerViewController:UIImagePickerController = UIImagePickerController()photoPickerViewController.sourceType = UIImagePickerControllerSourceType.photoLibraryphotoPickerViewController.delegate = selfself.present(photoPickerViewController, animated: true, completion: nil)
注意上面代码中,在第二行等号的右边所出现的以下代码:
UIImagePickerControllerSourceType.photoLibrary就是这句代码,指定了UIImagePickerController要打开的是系统相册,我们可以查看一下UIImagePickerControllerSourceType类的源代码,发现它本身是一个枚举:
public enum UIImagePickerControllerSourceType : Int { case photoLibrary case camera case savedPhotosAlbum}这个枚举非常简单易懂:
photoLibrary:系统图库
camera:系统摄像头
savedPhotosAlbum:相册
也就是说我们可以通过设置photoPickerViewController的sourceType为上述三项中的一项,来决定调用哪个系统功能
稍微进一步查看一下源代码,我们发现还有其它非常多的枚举量:
稍微进一步查看一下源代码,我们发现还有其它非常多的枚举量:
public enum UIImagePickerControllerSourceType : Int { case photoLibrary case camera case savedPhotosAlbum}public enum UIImagePickerControllerQualityType : Int { case typeHigh // highest quality case typeMedium // medium quality, suitable for transmission via Wi-Fi case typeLow // lowest quality, suitable for tranmission via cellular network @available(iOS 4.0, *) case type640x480 // VGA quality @available(iOS 5.0, *) case typeIFrame1280x720 @available(iOS 5.0, *) case typeIFrame960x540}public enum UIImagePickerControllerCameraCaptureMode : Int { case photo case video}public enum UIImagePickerControllerCameraDevice : Int { case rear case front}public enum UIImagePickerControllerCameraFlashMode : Int { case off case auto case on}看懂这些枚举量的用途不需要太好的英文水平,除了在本例中用到的UIImagePickerControllerSourceType外,我在这里将其它枚举量简单做个说明:
UIImagePickerControllerQualityType:成像质量
UIImagePickerControllerCameraCaptureMode:拍照或者录像
UIImagePickerControllerCameraDevice:选择前置摄像头或是后置摄像头
UIImagePickerControllerCameraFlashMode:闪光灯模式
不再展开了,继续回来。我将调用摄像头拍照的代码封装成了一个方法,便于绑定到触发事件上:
/** * 当用户点击界面上的相册按钮时,会打开系统相册,从而让用户选择照片 */@IBAction func pickPhotoFromAlbum(_ sender: Any) { /* * 用来打开系统相册的view controller */ let photoPickerViewController:UIImagePickerController = UIImagePickerController() photoPickerViewController.sourceType = UIImagePickerControllerSourceType.photoLibrary photoPickerViewController.delegate = self self.present(photoPickerViewController, animated: true, completion: nil)}
四、编写方法,获取从相册选择的图片
要获取从相册所拍选择的图片,我们主要需要重载以下方法:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {//...}注意这个方法入参列表中的第二个参数“didFinishPickingMediaWithInfo info:[String : Any]”,选择的结果就会被保存在这个参数里面,我们可以通过以下方法来获取:
guard var selectedImage = info[UIImagePickerControllerOriginalImage] as? UIImage else { fatalError("Expected a dictionary containing an image, but was provided the following: \(info)")}这样一来,从相册选择的照片就成为了一个UIImage对象。
下面贴出完整的方法:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { guard var selectedImage = info[UIImagePickerControllerOriginalImage] as? UIImage else { fatalError("Expected a dictionary containing an image, but was provided the following: \(info)") } picker.dismiss(animated: true, completion: nil)}拿到了UIImage对象后,我们就可以做自己需要的操作了,比如将图片显示在界面上,或是上传到服务器
五、编写方法,取消选择
以下方法为我们提供了退出相册的途径:func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { picker.dismiss(animated: true, completion: nil)}
小结
调取相册的各项功能都用到了Swift提供的代理(delegate)机制,它的最大的好处在于,在上述各步骤中,我们只有在调取相册的时候需要手动触发,其它方法全部都由代理自动调用,我们只要实现这些方法就可以了。
阅读全文
0 0
- 基于Swift的iOS应用程序开发:使用UIImagePickerController从相册选择图片
- 基于Swift的iOS应用程序开发:使用UIImagePickerController调取摄像头进行拍照
- iOS UIImagePickerController从相册获取图片
- Swift - 从相册中选择照片并上传(使用UIImagePickerController)
- 基于Swift的iOS应用程序开发:以Base64字符串形式上传文件——从iOS选择文件并上传
- iOS开发之UIImagePickerController图片选择管理器
- iOS使用UIImagePickerController在相册中选择破损图crash
- swift中UIImagePickerController的使用(相册、图库)
- Swift-->从相册(摄像头)选择照片,图片选择
- iOS从相册 相机选择图片
- iOS从相册选择图片进行压缩
- iOS开发中使用相机或系统相册的一些问题总结(UIImagePickerController)
- UIImagePickerController从拍照、图库、相册获取图片
- UIImagePickerController从拍照、图库、相册获取图片
- UIImagePickerController从拍照、图库、相册获取图片
- UIImagePickerController从本地相册加载图片
- UIImagePickerController从拍照、图库、相册获取图片
- UIImagePickerController从拍照、图库、相册获取图片
- HTML标签
- JavaScript window、location对象基础知识整理
- Android LayoutParams
- Android要点记录
- IntelliJ IDEA 2017激活--for Mac
- 基于Swift的iOS应用程序开发:使用UIImagePickerController从相册选择图片
- Android开发之动画效果浅析
- 写在学习Java GUI之前
- 《剑指offer》刷题笔记(位运算):二进制中1的个数
- 【我的Android进阶之旅】Android 源代码中的Java代码中//$NON-NLS-1$ 注释是什么意思?
- Socket之客户端Socket
- 使用git管理unity工程
- Java Swing事件处理机制
- Shader补充记录