UIImagePickerController 选照片 拍照 录视频

最近研究了一下UIImagePickerController,发现以前的写的项目中用UIImagePickerController做的换头像的功能存在很多的不规范之处。so,重新整理一下,不为别的只为了让自己以后更规范,当然更方便啦。

功能:三个按钮分别为拍照、录制视频和访问相册

具体实现如下:

类必须遵守<UINavigationControllerDelegate,UIImagePickerControllerDelegate>协议,并实现代理方法;

代理方法如下:

#pragma mark - UIImagePickerController的代理方法

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info

{

    NSLog(@"info:  %@:",info);

    NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];

    //MobileCoreServices.frameWork中的kUTTypeImagemediaType的默认值就是kUTTypeImage

    //拍照

    if ([mediaType isEqualToString:(NSString *)kUTTypeImage] && picker.sourceType == UIImagePickerControllerSourceTypeCamera) {

        UIImage * theImage = nil;

        if (picker.allowsEditing) {

            theImage = [info objectForKey:UIImagePickerControllerEditedImage];

        }else{

            theImage = [info objectForKey:UIImagePickerControllerOriginalImage];

        }

        UIImageWriteToSavedPhotosAlbum(theImage, self, @selector(image:didFinishSavingWithError: contextInfo:), nil);

    }else if([mediaType isEqualToString:(NSString *)kUTTypeMovie] && picker.sourceType == UIImagePickerControllerSourceTypeCamera){

        //获取拍摄视频url,并存入媒体库

        NSURL *mediaURL = [info objectForKey:UIImagePickerControllerMediaURL];

        NSString *urlStr = [mediaURL path];

        if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(urlStr)) {

            //保存视频到相簿,注意也可以使用ALAssetsLibrary来保存

            UISaveVideoAtPathToSavedPhotosAlbum(urlStr, self, @selector(video:didFinishSavingWithError:contextInfo:), nil);//保存视频到相簿

        }

    }else{

#warning 选择照片分支

    }

    [imagePickerController dismissViewControllerAnimated:YES completion:nil];

}

//点击cancel时回调函数

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker

{

    [imagePickerController dismissViewControllerAnimated:YES completion:nil];

}


调用UIImagePickerController的三种方式实现:

/**

 *  拍照

 *

 *  @param sender 拍照按钮

 */

- (IBAction)takePhoto:(id)sender {

    

    

    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

        //拍照或者录制视频

        imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;

        //设置拍摄照片

        imagePickerController.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto;

        //选择使用前置摄像头,默认为后置

        imagePickerController.cameraDevice = UIImagePickerControllerCameraDeviceFront;

        //设置拍摄的照片可以编辑

        imagePickerController.allowsEditing = YES;

        

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

        

    }else{

        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"提示" message:@"相机不可用" preferredStyle:UIAlertControllerStyleAlert];

        UIAlertAction *cancleAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {

            NSLog(@"点击了取消");

        }];

        [alertController addAction:cancleAction];

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

    }

    

}



/**

 *  录制视频

 *

 *  @param sender

 */

- (IBAction)takeVideo:(id)sender {

    

    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

        //拍照或者录制视频

        imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;

        

        // mediaTypes设为所有支持的多媒体类型

        imagePickerController.mediaTypes = [UIImagePickerController

                             availableMediaTypesForSourceType:

                             UIImagePickerControllerSourceTypeCamera];

        //设置拍摄照片

        imagePickerController.cameraCaptureMode = UIImagePickerControllerCameraCaptureModeVideo;

        //选择使用前置摄像头,默认为后置

        imagePickerController.cameraDevice = UIImagePickerControllerCameraDeviceRear;

        // 设置拍摄高质量的视频

        imagePickerController.videoQuality = UIImagePickerControllerQualityTypeHigh;

        //设置拍摄的照片可以编辑

        imagePickerController.allowsEditing = YES;

        

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

        

    }else{

        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"提示" message:@"相机不可用" preferredStyle:UIAlertControllerStyleAlert];

        UIAlertAction *cancleAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {

            NSLog(@"点击了取消");

        }];

        [alertController addAction:cancleAction];

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

    }

    

}

/**

 *  访问相册

 *

 *  @param sender

 */

- (IBAction)loadPhotoes:(id)sender {

    imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

    imagePickerController.allowsEditing = YES;

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

    

}





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值