iOS 开发中不可避免要调用系统相机完成照片或者视频的拍摄,使用相机有两种方式:AVFoundation 和 UIImagePickerController,如果需求比较简单并且对UI没有特殊要求可以使用 UIImagePickerController,本文就介绍一下UIImagePickerController 的使用
UIImagePickerController 基本使用
UIImagePickerController 是苹果官方提供的一套相机、相册处理的方式,使用 UIImagePickerController你可以调用相机拍摄照片视频、调用相册功能,它提供了非常简单的拍照方法,支持所有的基本功能,比如切换到前置摄像头、开关闪光灯、点击屏幕区域实现对焦和调整曝光等
UIImagePickerController 的基本使用比较简单,主要有以下两步;
初始化
UIImagePickerController类的实例对象,并且设置该实例对象的相关属性实现
UIImagePickerController的相关代理方法
先看一下 UIImagePickerController 的相关属性
|
|
以上就是使用 UIImagePickerController 用到的大部分属性了,下面代码演示具体使用
|
|
UIImagePickerControlle 既可以调用相机拍摄照片和视频,也可以设置 sourceType 获取相册或者图库中的照片和视频(本文不做讨论),除了UIImagePickerControlle iOS 还有另外两个框架:AssetsLibrary 和 PhotoKit 也可以访问 iOS 设备的照片和视频,以后有机会讨论一下这三者的用法
在使用 UIImagePickerController 的时候的时候,最好先判断一下相机或者相关 sourceType 是否可用
|
|
注意:使用相机注意要在
Info.plist中添加以下隐私权限的申明:
123456 <key>NSCameraUsageDescription</key><string>App需要您的同意,才能访问相机</string><key>NSMicrophoneUsageDescription</key><string>App需要您的同意,才能访问麦克风</string><key>NSPhotoLibraryUsageDescription</key><string>App需要您的同意,才能访问相册</string>
上面的工作完成之后,用户就可以在 UIImagePickerController 中选择照片或者拍摄的照片和视频了,用户选择的照片或者视频可以在 UIImagePickerController 的代理方法里面获取到,因为 UIImagePickerController 继承自 UINavigationController, 所以要实现代理方法必须遵守 UINavigationControllerDelegate 和 UIImagePickerControllerDelegate 两个代理协议:
|
|
看如何从代理方法里面获取用户选择好的照片和视频
|
|
上面把用户选择的照片或者视频保存在相册,实际开发中可能是把照片或者视频上传到服务器,上面就是 UIImagePickerController 中使用相机拍照或者拍摄视频的用法,sourcceType 为 photoLibrary 或者 savedPhotosAlbum 时可以作为系统的相册选择器,从代理方法里获取选择的照片或者视频上面是一样的
自定义 UIImagePickerController
UIImagePickerController 的 sourcceType 为相机的时候可以简单的自定义UI,自定义UI需要用到下面的属性和方法
|
|
以下是我简单的自定义UI的 UIImagePickerController
|
|
自定义UI情况下,allowsEditing 不可用,所以拍照完成或者录制视频完成之后不会跳转编辑页面而是直接进入代理方法,在代理方法里获取照片或者视频和正常情况是一样的,就不再赘述,详细请参考 Demo 代码
上面就是 UIImagePickerController 的使用,可以发现 UIImagePickerController 只能很简单的使用系统的相机进行拍照和视频,下篇文章将介绍如何使用 AVFoundation 自定义相机,使用 AVFoundation 自定义相机可以控制硬件的参数、更加细致进行图像捕捉等
以上です
本人刚开始写博客,主要是为了给自己的知识点做一个笔记,方便自己以后查阅,如果能让别人有所启发也是荣幸之至!如有错误,欢迎指正!