iOS 相机工具类(支持照片/视频)
最近优化一些项目,然后就简单的把调用系统相机封装了一下。
1 首先需要申请权限
2 跳转到UIImagePickerController的代码
+(ImagePickerManager *)shareManager{static ImagePickerManager *instance = nil;static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{instance = [[ImagePickerManager alloc] init];});return instance;
}-(void)showImagePickFromController:(UIViewController *)vc sourceType:(UIImagePickerControllerSourceType)sourceType completion:(completionImageBlock)completion{[self showImagePickFromAllowsEditing:NO videoQuality:UIImagePickerControllerQualityTypeLow sourceType:sourceType modalPresentationStyle:UIModalPresentationFullScreen controller:vc isFlash:YES completion:completion];
}-(void)showImagePickFromController:(UIViewController *)vc isEditing:(BOOL)isEditing isFlash:(BOOL)isFlash completion:(completionImageBlock)completion{[self showImagePickFromAllowsEditing:isEditing videoQuality:UIImagePickerControllerQualityTypeLow sourceType:UIImagePickerControllerSourceTypePhotoLibrary modalPresentationStyle:UIModalPresentationFullScreen controller:vc isFlash:isFlash completion:completion];
}-(void)showImagePickFromController:(UIViewController *)vc completion:(completionImageBlock)completion{[self showImagePickFromAllowsEditing:NO videoQuality:UIImagePickerControllerQualityTypeLow sourceType:UIImagePickerControllerSourceTypePhotoLibrary modalPresentationStyle:UIModalPresentationFullScreen controller:vc isFlash:YES completion:completion];
}-(void)showImagePickFromAllowsEditing:(BOOL)allowsEditing videoQuality:(UIImagePickerControllerQualityType)videoQuality sourceType:(UIImagePickerControllerSourceType)sourceType modalPresentationStyle:(UIModalPresentationStyle)modalPresentationStyle controller:(UIViewController *)vc isFlash:(BOOL)isFlash completion:(completionImageBlock)completion{UIImagePickerController *picker = [[UIImagePickerController alloc] init];picker.delegate = self;//可以编辑picker.allowsEditing = allowsEditing;//设置图片质量picker.videoQuality=videoQuality;picker.sourceType = sourceType;picker.modalPresentationStyle = modalPresentationStyle;picker.mediaTypes = @[(NSString *)kUTTypeImage,(NSString *)kUTTypeMovie];if (isFlash&&sourceType==UIImagePickerControllerSourceTypeCamera) {picker.cameraFlashMode = UIImagePickerControllerCameraFlashModeOn;}_vc = vc;_comBlock = [completion copy];[_vc presentViewController:picker animated:YES completion:^{}];
}3 取消
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{[_vc dismissViewControllerAnimated:YES completion:^{}];
}
4 确定图片之后的回调
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{//主线程等待0.5秒回到根视图dispatch_after(dispatch_time(DISPATCH_TIME_NOW,(int64_t)(0.51 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{if (![_vc.presentedViewController isBeingDismissed]) {[_vc dismissViewControllerAnimated:YES completion:^{}];}});NSString *mediaType = info[UIImagePickerControllerMediaType];if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {UIImage *editedImage = info[UIImagePickerControllerEditedImage];UIImage *originalImage = info[UIImagePickerControllerOriginalImage];UIImage *needImage = nil;if (originalImage) {needImage = originalImage;}if (editedImage) {needImage = editedImage;}if (_comBlock) {_comBlock(needImage);}}else if([mediaType isEqualToString:(NSString *)kUTTypeMovie]){NSURL *videoURL = info[UIImagePickerControllerMediaURL];if (videoURL) {if (_comBlock) {_comBlock(videoURL);}}}
}
5 使用
/*UIImagePickerControllerSourceTypePhotoLibrary 总相册UIImagePickerControllerSourceTypeCamera 摄像头UIImagePickerControllerSourceTypeSavedPhotosAlbum 时刻*/[[ImagePickerManager shareManager] showImagePickFromController:self completion:^(id imageOrMovie) {if (imageOrMovie) {[self showImage:imageOrMovie];}}];Demo
点击打开链接
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
