17.3.2 UIImagePickerControllerDelegate

17.3.2 UIImagePickerControllerDelegate

如果需要知道用户在UIImagePickerController上做了哪些操作,就必须在一个实例中满足UIImage PickerControllerDelegate协议。这个协议声明了两个方法:

当用户成功地拍摄或者选取了照片和视频,didFinishPickingMediaWithInfo方法将被调用。第一个参数picker就是弹起的这个UIImagePickerController;第二个参数是一个Dictionary,以String为键名,而值是取决于这个类型。键有以下几种:

1.UIImagePickerControllerMediaType

这个键对应的值存放了获取到的媒体类型。

2.UIImagePickerControllerOriginalImage

这个键对应的值存放了一个原始的UIImage实例。

3.UIImagePickerControllerEditedImage

这个键对应的值存放了一个已经编辑过的UIImage实例。

4.UIImagePickerControllerCropRect

这个键对应的值存放了一个NSValue的实例,可以转换为CGRect,表示在选取时的图片范围。

5.UIImagePickerControllerMediaURL

这个键对应的值存放了一个NSURL的实例,可以用于访问这个选取对象。

6.UIImagePickerControllerReferenceURL(iOS 11.0版本废弃)

这个键对应的值存放了一个NSURL的实例,可以连接到AssetsLibrary框架。

7.UIImagePickerControllerMediaMetadata

这个键对应的值存放了一个NSDictionary的实例,其中包含了这个照片的元数据。

8.UIImagePickerControllerLivePhoto(iOS 9.1版本之后支持)

这个键对应的值存放了一个PHLivePhoto实例,代表了选取的LivePhoto。

9.UIImagePickerControllerPHAsset(iOS 11.0版本之后支持)

这个键对应的值存放了一个PHAsset实例,代表了选取的图片或者视频。

10.UIImagePickerControllerImageURL(iOS 11.0版本之后支持)

这个键对应的值存放了一个NSURL的实例,代表了选取的图片或者视频。

我们可以在获取到这个info之后,通过这些键来获取自己想要的数据。需要注意的是,如果图片来自于照相机,UIImagePickerController并不会帮助我们保存到相册,需要我们调用如下三个函数:

此外,还需要注意的是,在保存多媒体之前先要确认是否获取到相册的保存权限。