700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 调用系统功能-UIImagePickerController-相册/相机/相簿

调用系统功能-UIImagePickerController-相册/相机/相簿

时间:2023-11-05 00:09:52

相关推荐

调用系统功能-UIImagePickerController-相册/相机/相簿

UIImagePickerController 相册/相机/相簿

1. info.plist 设置
Privacy - Photo Library Usage Description 是否允许设备调用您的相册?Privacy - Camera Usage Description 是否允许设备调用您的相机?
2. UIImagePickerControllerSourceType 控制器类型
UIImagePickerControllerSourceTypePhotoLibrary 相册UIImagePickerControllerSourceTypeSavedPhotosAlbum 相簿UIImagePickerControllerSourceTypeCamera 相机
3. 初始化

// 判断是否可以打开相册/相机/相簿if (![UIImagePickerController isSourceTypeAvailable:sourceType]) return;UIImagePickerController *picker = [[UIImagePickerController alloc] init];picker.sourceType = sourceType; // 设置控制器类型// UIImagePickerController继承UINavigationController实现UINavigationDelegate和UIImagePickerControllerDelegatepicker.delegate = self; // 设置代理

4. allowsEditing 是否允许编辑(查看详图)

picker.allowsEditing = YES;

5. 判断

#pragma mark ~~~~~~~~~~ 摄像头和相册相关的公共类 ~~~~~~~~~~// 判断设备是否有摄像头- (BOOL) isCameraAvailable{return [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];}// 前面的摄像头是否可用- (BOOL) isFrontCameraAvailable{return [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront];}// 后面的摄像头是否可用- (BOOL) isRearCameraAvailable{return [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear];}// 判断是否支持某种多媒体类型:拍照,视频- (BOOL) cameraSupportsMedia:(NSString *)paramMediaType sourceType:(UIImagePickerControllerSourceType)paramSourceType{__block BOOL result = NO;if ([paramMediaType length] == 0){NSLog(@"Media type is empty.");return NO;}NSArray *availableMediaTypes =[UIImagePickerController availableMediaTypesForSourceType:paramSourceType];[availableMediaTypes enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL*stop) {NSString *mediaType = (NSString *)obj;if ([mediaType isEqualToString:paramMediaType]){result = YES;*stop= YES;} }];return result;}// 检查摄像头是否支持录像- (BOOL) doesCameraSupportShootingVideos{return [self cameraSupportsMedia:(NSString *)kUTTypeMovie sourceType:UIImagePickerControllerSourceTypeCamera];}// 检查摄像头是否支持拍照- (BOOL) doesCameraSupportTakingPhotos{return [self cameraSupportsMedia:( NSString *)kUTTypeImage sourceType:UIImagePickerControllerSourceTypeCamera];}#pragma mark ~~~~~~~~~~ 相册文件选取相关 ~~~~~~~~~~// 相册是否可用- (BOOL) isPhotoLibraryAvailable{return [UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypePhotoLibrary];}// 是否可以在相册中选择视频- (BOOL) canUserPickVideosFromPhotoLibrary{return [self cameraSupportsMedia:( NSString *)kUTTypeMovie sourceType:UIImagePickerControllerSourceTypePhotoLibrary];}// 是否可以在相册中选择视频- (BOOL) canUserPickPhotosFromPhotoLibrary{return [self cameraSupportsMedia:( NSString *)kUTTypeImage sourceType:UIImagePickerControllerSourceTypePhotoLibrary];}

6. 相机的详细设置

// 如果是相机if (sourceType == UIImagePickerControllerSourceTypeCamera) {// 录像的最大时间picker.videoMaximumDuration = 10;// 相机的类型 (需要导入<MobileCoreServices/MobileCoreServices.h>)(video是无声音,movie是有声音)picker.mediaTypes = @[(NSString *)kUTTypeImage,(NSString *)kUTTypeMovie];// 视频质量/**UIImagePickerControllerQualityTypeUIImagePickerControllerQualityTypeHigh 高清UIImagePickerControllerQualityTypeMedium 中等UIImagePickerControllerQualityTypeLow 低等UIImagePickerControllerQualityType640x480*/picker.videoQuality = UIImagePickerControllerQualityTypeHigh;// 设置摄像头模式/**UIImagePickerControllerCameraCaptureModeUIImagePickerControllerCameraCaptureModePhoto,UIImagePickerControllerCameraCaptureModeVideo*/picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModeVideo;/**UIImagePickerControllerCameraDevice 设置前后射像头\UIImagePickerControllerCameraDeviceRear 后UIImagePickerControllerCameraDeviceFront 前*/picker.cameraDevice = UIImagePickerControllerCameraDeviceFront;/**UIImagePickerControllerCameraFlashMode 闪光模式UIImagePickerControllerCameraFlashModeOff 关闭UIImagePickerControllerCameraFlashModeAuto 自动UIImagePickerControllerCameraFlashModeOn 开启*/picker.cameraFlashMode = UIImagePickerControllerCameraFlashModeOff;/**UIImagePickerControllerImageURLExportPreset 图片地址出口预设UIImagePickerControllerImageURLExportPresetCompatible 兼容UIImagePickerControllerImageURLExportPresetCurrent 当前*/(IOS 11 后使用)picker.imageExportPreset = UIImagePickerControllerImageURLExportPresetCompatible;picker.videoExportPreset = UIImagePickerControllerImageURLExportPresetCompatible;}

7. 跳转到控制器

[self presentViewController:picker animated:YES completion:nil];

8. 其他设置的属性

/* 是否显示摄像头控制面板,默认为YES */@property (nonatomic) BOOL showsCameraControls;/* 摄像头上覆盖的视图 */@property (nonatomic,strong) UIView *cameraOverlayView;/* 摄像头形变 */@property (nonatomic) CGAffineTransform cameraViewTransform;

9. 对象调用的方法
-(void)takePicture; //拍照 -(BOOL)startVideoCapture;//开始录制视频-(void)stopVideoCapture;//停止录制视频
10. 保存图片或录像

/* 保存图片到相簿 */void UIImageWriteToSavedPhotosAlbum(UIImage *image,//保存的图片UIImageid completionTarget,//回调的执行者SEL completionSelector, //回调方法void *contextInfo//回调参数信息);//上面一般保存图片的回调方法为:- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo;/* 判断是否能保存视频到相簿 */BOOL UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(NSString *videoPath);/* 保存视频到相簿 */void UISaveVideoAtPathToSavedPhotosAlbum(NSString *videoPath, //保存的视频文件路径id completionTarget, //回调的执行者SEL completionSelector,//回调方法void *contextInfo//回调参数信息);

11. UIImagePickerControllerDelegate代理方法

// 获取图片后操作- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info {NSLog(@"%@",info);//从info取出此时摄像头的媒体类型NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {//如果是拍照//获取拍照的图像UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];//获取照片的原图 UIImage* original = [info objectForKey:UIImagePickerControllerOriginalImage]; //获取图片裁剪的图 UIImage* edit = [info objectForKey:UIImagePickerControllerEditedImage]; //获取图片裁剪后,剩下的图 UIImage* crop = [info objectForKey:UIImagePickerControllerCropRect]; //获取图片的url NSURL* url = [info objectForKey:UIImagePickerControllerMediaURL]; //获取图片的metadata数据信息 NSDictionary* metadata = [info objectForKey:UIImagePickerControllerMediaMetadata];//保存图像到相簿UIImageWriteToSavedPhotosAlbum(image, self,@selector(image:didFinishSavingWithError:contextInfo:), nil);} else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie]) {//如果是录像//获取录像文件路径URLNSURL *url = [info objectForKey:UIImagePickerControllerMediaURL];NSString *path = url.path;//判断能不能保存到相簿if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(path)) {//保存视频到相簿UISaveVideoAtPathToSavedPhotosAlbum(path, self,@selector(video:didFinishSavingWithError:contextInfo:), nil);}}// 异步保存视频方法 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(urlStr)) {UISaveVideoAtPathToSavedPhotosAlbum(urlStr, self, @selector(video:didFinishSavingWithError:contextInfo:), nil);}});// 销毁控制器[picker dismissViewControllerAnimated:YES completion:nil];}- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {[picker dismissViewControllerAnimated:YES completion:nil];NSLog(@"我点击了关闭");}// 上面保存图片或录像的方法- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {NSLog(@"保存图片完成");}- (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {NSLog(@"保存视频完成");}

仅供参考,错误勿怪!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。