OC相机封装

AlbumService询问相机权限
AuthorizationService相机封装
plist文件设置:
<key>NSCameraUsageDescription</key> <string>App需要您的同意,才能访问相机</string> <key>NSPhotoLibraryUsageDescription</key> <string>App需要您的同意,才能访问相册</string>
代码:AlbumService.h
#import "AuthorizationService.h"
#import<AssetsLibrary/AssetsLibrary.h>
#import<CoreLocation/CoreLocation.h>
#import<AVFoundation/AVCaptureDevice.h>
#import <AVFoundation/AVMediaFormat.h>
@implementation AuthorizationService
/**
判断是否有相机权限
*/
+ (BOOL)isHaveCameraAuthor{
AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
if (authStatus ==AVAuthorizationStatusRestricted ||//此应用程序没有被授权访问的照片数据。可能是家长控制权限
authStatus ==AVAuthorizationStatusDenied) //用户已经明确否认了这一照片数据的应用程序访问
{
// 无权限 引导去开启
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication]canOpenURL:url]) {
[[UIApplication sharedApplication]openURL:url];
}
return NO;
}
return YES;
}
/**
判断是否有相册访问权限
*/
+ (BOOL)isHavePhotoAuthor{
ALAuthorizationStatus author = [ALAssetsLibrary authorizationStatus];
if (author ==kCLAuthorizationStatusRestricted || author ==kCLAuthorizationStatusDenied){
//无权限 引导去开启
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
}
return NO;
}
return YES;
}
@end
AlbumService.h
#import <Foundation/Foundation.h> @interface AlbumService : NSObject @property (nonatomic,assign) UIImagePickerControllerSourceType sType; @property (nonatomic,strong) UIImage *selectedImage; @property (nonatomic,assign) id imageStateKey; @property (nonatomic,strong) void (^doneSelectBlock)(UIImage *image); +(AlbumService *)sharedContactsService; -(void)showAlbumInViewController:(UIViewController *)curVc;; -(void)hideAlbum; @end
AlbumService.m
#import "AlbumService.h"
@interface AlbumService ()<UINavigationControllerDelegate,UIImagePickerControllerDelegate>
{
UIImagePickerController *imagePicker;
}
@end
@implementation AlbumService
static AlbumService *contacts;
+(AlbumService *)sharedContactsService{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
contacts = [AlbumService new];
});
return contacts;
}
#pragma mark - setter
-(void)setSType:(UIImagePickerControllerSourceType)sType
{
_sType = sType;
if (![UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]) {
_sType = UIImagePickerControllerSourceTypePhotoLibrary;
}
}
#pragma mark - public
-(void)showAlbumInViewController:(UIViewController *)curVc
{
UIImagePickerControllerSourceType sourceType = self.sType?:UIImagePickerControllerSourceTypePhotoLibrary;
if (!imagePicker) {
imagePicker = [[UIImagePickerController alloc]init];
imagePicker.delegate = self;
imagePicker.allowsEditing = YES;
}
imagePicker.sourceType = sourceType;
[curVc presentViewController:imagePicker animated:YES completion:nil];
}
-(void)hideAlbum
{
[imagePicker dismissViewControllerAnimated:YES completion:nil];
}
#pragma mark - UIImagePickerViewDelegate
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
NSString *stateKey = self.imageStateKey?:UIImagePickerControllerEditedImage;
UIImage *resultImage = [info valueForKey:stateKey];
__weak typeof(self) weakSelf = self;
if (weakSelf.doneSelectBlock) {
weakSelf.doneSelectBlock(resultImage);
}
[picker dismissViewControllerAnimated:YES completion:nil];
}
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
[picker dismissViewControllerAnimated:YES completion:nil];
}
@end
使用
AlbumService *service = [AlbumService sharedContactsService];
/*打开相册*/
if([AuthorizationService isHavePhotoAuthor]){//是否有相册权限
service.sType = UIImagePickerControllerSourceTypePhotoLibrary;
}else{
return;
}
/*打开相机*/
if([AuthorizationService isHaveCameraAuthor]){{//是否有相机权限
service.sType = UIImagePickerControllerSourceTypeCamera;
}else{
return;
}
__block typeof(self)weakSelf = self;
service.doneSelectBlock = ^(UIImage *img){
//回调的UIImage
_choseImg = img;
};
[service showAlbumInViewController:self];
浙公网安备 33010602011771号