在App开发时,当需要调用摄像头拍照或者希望从相册中选择一张照片时,都可以使用UIImagePickerController类来完成。UIImagePickerController类把从iOS设备中获取图片的操作进行了统一封装,使用图片来源来进行区分,也就是说:不论从摄像头拍照获取图片,还是从相册中选取图片,区别仅仅在于获取图片的渠道或方式不同,其他对图片的处理都是统一的。
UIImagePickerController类中提供了用于图片选择的相关属性以及方法,同时定义了UIImagePicker-ControllerDelegate代理协议,可以用于监测用户选择图片的行为动作。UIImagePickerController类中,如下属性和方法需要重点掌握。
图片获取来源,默认为照片库。UIImagePickerControllerSourceType的取值有三个,分别为
UIImage-PickerControllerSourceTypePhotoLibrary(照片库)、
UIImagePickerControllerSourceTypeCamera(相机)、
UIImagePickerControllerSourceTypeSavedPhotosAlbum(相册)。
@property(nonatomic) UIImagePickerControllerSourceType sourceType;
// 设置当拍照完或在相册选完照片后,是否允许编辑图像。
@property(nonatomic) BOOL allowsEditing;
// 可对图像或者照相机模式进行进一步操作设置的代理。
@property(nullable, nonatomic, weak)id<UINavigationControllerDelegate, UIImagePickerControllerDelegate>delegate;
// 判断设备是否支持照相机/图片库/相册功能。
+(BOOL)isSourceTypeAvailable:(UIImagePickerControllerSourceType)sourceType;
UIImagePickerControllerDelegate代理协议中提供了用户选择图片后的回调方法,在回调方法中可以获取到用户选择的图片,从而可以进行进一步的处理。
用户完成图片选择后调用。在该方法的参数info中可以获取到用户选择的图片信息。
由于参数info是一个字典,因此在UIImagePickerController类中定义了相关的键值名称用于获取对应的值。
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickerMediaWithInfo:(NSDictionary<NSString *, id> *)info;
// 用户取消选择后调用
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;
UIImagePickerController的使用
示例