UIImagePickerController一个获取图片和视频的类,简单特点:
1,可获取相册,图库的图片;
2,可进行拍照,视频录制;
3,可对图片进行编辑;
4,可保存图片和视频到手机;
5,由下面方法推出:
1 - (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^ __nullable)(void))completion;6,只支持竖屏模式;
UIImagePickerController.h文件查看
UIImagePickerController 父类继承关系
UIImagePickerController -> UINavigationController -> UIViewController -> UIResponder -> NSObject
类方法
1,当前UIImagePickerControllerSourceType类型是否可用;
1 | + (BOOL)isSourceTypeAvailable:(UIImagePickerControllerSourceType)sourceType; |
UIImagePickerControllerSourceType是一个枚举类型,表示打开类型:
1 | typedef NS_ENUM(NSInteger, UIImagePickerControllerSourceType) { |
2,返回一个当前相机支持类型,拍照,视频,拍照和视频等三种方式;
1 | + (nullable NSArray<NSString *> *)availableMediaTypesForSourceType:(UIImagePickerControllerSourceType)sourceType; |
3,判断当前手机摄像头是否可用;
1 | + (BOOL)isCameraDeviceAvailable:(UIImagePickerControllerCameraDevice)cameraDevice; |
UIImagePickerControllerCameraDevice是一个枚举类型,表示的是摄像头的方向;
1 | typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraDevice) { |
4,判断手机前置摄像头或者后置摄像头是否支持闪光灯和手电筒;
1 | + (BOOL)isFlashAvailableForCameraDevice:(UIImagePickerControllerCameraDevice)cameraDevice; |
5,判断手机不同摄像头支持的拍摄类型,有图片和视频;
1 | + (nullable NSArray<NSNumber *> *)availableCaptureModesForCameraDevice:(UIImagePickerControllerCameraDevice)cameraDevice |
UIImagePickerControllerCameraDevice一个枚举,表示摄像头支持拍摄类型;
1 | typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraCaptureMode) { |
属性
1,UIImagePickerController协议,包含本身UIImagePickerControllerDelegate和父类中的UINavigationControllerDelegate;
1 | @property(nullable,nonatomic,weak)id <UINavigationControllerDelegate, UIImagePickerControllerDelegate> delegate; |
UIImagePickerControllerDelegate协议方法;
1 | @optional//该修饰词修饰的方法不要求强制实现 |
2,设置打开类型,UIImagePickerControllerSourceType,包含:图库,照相机,相册;默认是:UIImagePickerControllerSourceTypePhotoLibrary,图库
1 | @property(nonatomic)UIImagePickerControllerSourceType sourceType; |
3,在打开照相机下该值才有效,3中情况:只有拍照,只有视频,视频和拍照;
1 | //@[@"public.image",@"public.movie"] |
4,获取到的图片(视频无效)是否可以编辑,默认为NO:
1 | // |
5,获取到图片转换的类型,枚举类型;
1 | //iOS11 的一个新属性,默认Current |
UIImagePickerControllerImageURLExportPreset
1 | typedef NS_ENUM(NSInteger, UIImagePickerControllerImageURLExportPreset) { |
6,视频模式下才有效,最大录制时间,默认10分钟;
1 | @property(nonatomic)NSTimeInterval videoMaximumDuration; |
7,视频下有效,录制视频的质量,枚举类型;
1 | @property(nonatomic)UIImagePickerControllerQualityType videoQuality NS_AVAILABLE_IOS(3_1); |
UIImagePickerControllerQualityType
1 | typedef NS_ENUM(NSInteger, UIImagePickerControllerQualityType) { |
8,视频压缩质量,当为nil时,默认使用第七点中videoQuality的值;
1 | //AVAssetExportPreset* string,该属性在iOS 11后生效 |
自定义相机UI,属性,方法
在UIImagePickerControllerSourceTypeCamera下有效;
1,是否隐藏系统相机自带的的UI,默认是YES;设置为NO时,隐藏系统相机UI;
1 | @property(nonatomic)BOOL showsCameraControls |
2,设置一个覆盖相机的view; preview对应的图层表示的是相机所在的view层;
1 | @property(nullable, nonatomic,strong) __kindof UIView *cameraOverlayView NS_AVAILABLE_IOS(3_1); // set a view to overlay the preview view. |
3,设置preview的CGAffineTransform, CGAffineTransform是一个用于处理形变的类,其可以改变控件的平移、缩放、旋转等,其坐标系统采用的是二维坐标系,即向右为x轴正方向,向下为y轴正方向;
1 | @property(nonatomic)CGAffineTransform cameraViewTransform NS_AVAILABLE_IOS(3_1); // set the transform of the preview view. |
4,拍照;
1 | - (void)takePicture; |
5,开始录像,停止录像;
1 | - (BOOL)startVideoCapture; |
6,摄像头支持类型,默认是照片:UIImagePickerControllerCameraCaptureModePhoto;
1 | @property(nonatomic) UIImagePickerControllerCameraCaptureMode cameraCaptureMode NS_AVAILABLE_IOS(4_0); |
7,摄像头方向,默认使用后置摄像头:UIImagePickerControllerCameraDeviceRear;
1 | @property(nonatomic) UIImagePickerControllerCameraDevice cameraDevice NS_AVAILABLE_IOS(4_0); |
8,摄像头闪光灯模式,默认自动:UIImagePickerControllerCameraFlashModeAuto;
1 | @property(nonatomic) UIImagePickerControllerCameraFlashMode cameraFlashMode NS_AVAILABLE_IOS(4_0); |
扩展函数:保存照片和视频到图库
保存图片到图库
1 | UIKIT_EXTERN void UIImageWriteToSavedPhotosAlbum(UIImage *image, __nullable id completionTarget, __nullable SEL completionSelector, void * __nullable contextInfo) |
判断当前路径下的视频是否可以保存到相册;
1 | UIKIT_EXTERN BOOL UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(NSString *videoPath) |
保存视频到图库
1 | UIKIT_EXTERN void UISaveVideoAtPathToSavedPhotosAlbum(NSString *videoPath, __nullable id completionTarget, __nullable SEL completionSelector, void * __nullable contextInfo) |