使用系统拍照和录制视频

主要的类UIImagePickerController
遵循协议<UIImagePickerControllerDelegate,UINavigationControllerDelegate>
导入框架#import <AVFoundation/AVFoundation.h> #import <MobileCoreServices/MobileCoreServices.h>
拍摄照片:
#pragma mark ----照片拍摄
 UIImagePickerController *takePhotoPicker = [self createTakePhotoPicker];
 if (takePhotoPicker) {
     takePhotoPicker.delegate = weakSelf;
     [weakSelf.navigationController presentViewController:takePhotoPicker animated:YES   
     completion:nil];
 }
// 构造拍照控制器
- (UIImagePickerController *)createTakePhotoPicker {
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
        //是否在设置-隐私中授权了App访问相机?
        AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
        if (authStatus == AVAuthorizationStatusDenied) {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:[NSString stringWithFormat:@"请在iPhone的“设置-隐私-相机”选项中,允许%@访问你的相机。", APP_NAME]  
            delegate:nil cancelButtonTitle:@"好" otherButtonTitles:nil, nil];
            [alert show];
            return nil;
        }
        UIImagePickerController *takePhotoPicker = [[UIImagePickerController alloc] init];
        takePhotoPicker.allowsEditing = NO;
        takePhotoPicker.sourceType = UIImagePickerControllerSourceTypeCamera;
        takePhotoPicker.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeImage, nil];
        return takePhotoPicker;
    }
    else {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"您的设备不支持拍照功能"
        delegate:nil cancelButtonTitle:@"好" otherButtonTitles:nil, nil];
        [alert show];
        return nil;
    }
}
视频录制:
#pragma mark ----视频录制
 UIImagePickerController *takeVideoPicker = [self createTakeVideoPicker];
 takeVideoPicker.videoMaximumDuration = 30.0f; //录像最长时间
 if (takeVideoPicker) {
     takeVideoPicker.delegate = weakSelf;
     [weakSelf presentViewController:takeVideoPicker animated:YES completion:nil];
 }
//构造拍视频控制器
- (UIImagePickerController *)createTakeVideoPicker {
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
        //是否在设置-隐私中授权了App访问相机?
        AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
        if (authStatus == AVAuthorizationStatusDenied) {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:[NSString stringWithFormat:@"请在iPhone的“设置-隐私-相机”选项中,允许%@访问你的相机。", APP_NAME] delegate:nil cancelButtonTitle:@"好" otherButtonTitles:nil, nil];
            [alert show];
            return nil;
        }
        UIImagePickerController *takeVideoPicker = [[UIImagePickerController alloc] init];
        takeVideoPicker.allowsEditing = YES;
        takeVideoPicker.sourceType = UIImagePickerControllerSourceTypeCamera;
        takeVideoPicker.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeMovie, nil];
        takeVideoPicker.videoQuality = UIImagePickerControllerQualityTypeMedium;
        return takeVideoPicker;
    }
    else {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"您的设备不支持摄像功能" delegate:nil cancelButtonTitle:@"好" otherButtonTitles:nil, nil];
        [alert show];
        return nil;
    }
}
从手机相册选取视频:
#pragma mark ----从手机相册选择视频
    UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
    [imagePickerController setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];// 设置类型
    NSMutableArray *mediaTypes = [[NSMutableArray alloc] init];
    if ([self canUserPickVideosFromPhotoLibrary]){
        [mediaTypes addObject:( NSString *)kUTTypeMovie];
    }
    [imagePickerController setMediaTypes:mediaTypes];
    [imagePickerController setDelegate:self];// 设置代理
    self.imagePickerController = imagePickerController;
    [self presentViewController:imagePickerController animated:YES completion:nil];
// 是否可以在相册中选择视频
- (BOOL) canUserPickVideosFromPhotoLibrary{
    return [self cameraSupportsMedia:( NSString *)kUTTypeMovie sourceType:UIImagePickerControllerSourceTypePhotoLibrary];
}
// 判断是否支持某种多媒体类型:拍照,视频
- (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;
}
拍照/视频的代理:
#pragma mark ----视频页面/拍照页面/相册页面 完成后的回调
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
    //如果是拍照/相册选取图片
    if ([mediaType isEqualToString:(NSString *)kUTTypeImage])
    {
        //获取到当前图片
        UIImage *originalImage = (UIImage *)[info objectForKey:UIImagePickerControllerOriginalImage];
    }
    //如果是录制视频/相册选取视频
    else if([mediaType isEqualToString:(NSString *)kUTTypeMovie])
    {
        //获取到当前视频地址
        NSString *videoPathString = (NSString *)[[info objectForKey:UIImagePickerControllerMediaURL] path];
        NSURL *videoUrl = [info objectForKey:UIImagePickerControllerMediaURL];
    }
}
#pragma mark ----进入 视频页面/拍照页面/相册页面 点击取消按钮
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
    [picker dismissViewControllerAnimated:YES completion:nil];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值