美文网首页
IOS拍摄和相册的操作

IOS拍摄和相册的操作

作者: Johnny_Wu | 来源:发表于2018-12-20 11:16 被阅读0次

记录一下,自己总结的一个拍摄和相册的操作,包括了权限的检测。

#import <Photos/PHPhotoLibrary.h>
#import <AVFoundation/AVFoundation.h>
//拍照 NSCameraUsageDescription info.plist
+ (void)getPhotoFromCamera:(UIViewController <UIImagePickerControllerDelegate,UINavigationControllerDelegate>*)viewCtl
{
    AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
//    __weak typeof(self) weakSelf = self;
    //未决定的
    if(status == AVAuthorizationStatusNotDetermined) {
        [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
            dispatch_async(dispatch_get_main_queue(), ^{
                
                if(granted) {
                    [self getPhotoFromCamera:viewCtl];
                }
            });
        }];
        return;
    }
    if(status == AVAuthorizationStatusDenied) {    //已经拒绝的
        //TODO:mike need authorize
        [self openAuthorSet:viewCtl title:@"拍摄权限" content:@"跳转到开启拍摄权限?"];
        return;
    }
    if (status == AVAuthorizationStatusRestricted) { // 此应用程序没有被授权访问的照片数据。可能是家长控制权限。
//        NSLog(@"因为系统原因, 无法访问相机");
        [self errorTip:viewCtl title:@"提示" content:@"因为系统原因, 无法访问相机"];
        return;
    }
    
    //拍照
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
        UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
        imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
        imagePicker.delegate = viewCtl;
        [viewCtl presentViewController:imagePicker animated:YES completion:nil];
    }
}
//相册 NSPhotoLibraryUsageDescription info.plist
+ (void)getPhotoFromLibrary:(UIViewController <UIImagePickerControllerDelegate,UINavigationControllerDelegate>*)viewCtl
{
    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
    if (status == PHAuthorizationStatusRestricted) { // 此应用程序没有被授权访问的照片数据。可能是家长控制权限。
//        NSLog(@"因为系统原因, 无法访问相册");
        [self errorTip:viewCtl title:@"提示" content:@"因为系统原因, 无法访问相册"];
        return;
    }
    if (status == PHAuthorizationStatusDenied) { // 用户拒绝访问相册
        [self openAuthorSet:viewCtl title:@"相册权限" content:@"跳转到开启相册权限?"];
        return;
    }
    if (status == PHAuthorizationStatusNotDetermined) { // 用户还没有做出选择
        // 弹框请求用户授权
        [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
            dispatch_async(dispatch_get_main_queue(), ^{
                if (status == PHAuthorizationStatusAuthorized) { // 用户点击了好
                    // 放一些使用相册的代码
                    [self getPhotoFromLibrary:viewCtl];
                }
            });
        }];
        return;
    }
    
    //相册
    if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
        UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
        imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        imagePicker.delegate = viewCtl;
        [viewCtl presentViewController:imagePicker animated:YES completion:nil];
        
    }
}

//调到开启权限的对话框
+ (void)openAuthorSet:(UIViewController *)viewCtl title:(NSString *)title content:(NSString *)content
{
    UIAlertController * ac = [UIAlertController alertControllerWithTitle:title message:content preferredStyle:UIAlertControllerStyleAlert];
    
    UIAlertAction * action = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        
        NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
        if ([[UIDevice currentDevice] systemVersion].floatValue < 10.0) {
            url = [NSURL URLWithString:@"prefs:root=privacy"];
            
        }
        if ([[UIApplication sharedApplication]canOpenURL:url]) {
            [[UIApplication sharedApplication]openURL:url];
        }
    }];
    [ac addAction:action];
    UIAlertAction * action2 = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        ;
    }];
    
    [ac addAction:action2];
    [viewCtl presentViewController:ac animated:YES completion:nil];
}

//错误提示
+ (void)errorTip:(UIViewController *)viewCtl title:(NSString *)title content:(NSString *)content
{
    UIAlertController * ac = [UIAlertController alertControllerWithTitle:title message:content preferredStyle:UIAlertControllerStyleAlert];
    
    UIAlertAction * action = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
    [ac addAction:action];

    [viewCtl presentViewController:ac animated:YES completion:nil];
}

相关文章

网友评论

      本文标题:IOS拍摄和相册的操作

      本文链接:https://www.haomeiwen.com/subject/ektykqtx.html