视频录制,照片拍摄,保存等,UIImagePickerController

//

//  ViewController.m

//  PickUp

//

//  Created by yiral on 16/6/29.

//  Copyright © 2016 qust. All rights reserved.

//


#import "ViewController.h"

#import <MobileCoreServices/MobileCoreServices.h>

#import <AVFoundation/AVFoundation.h>


@interface ViewController ()<UIImagePickerControllerDelegate,UINavigationControllerDelegate>

@property (weak,nonatomic) IBOutletUIImageView *imageView;

@property(nonatomic,strong) UIImagePickerController *imagePick;

@property (assign,nonatomic)int isVideo;//是否录制视频,如果为1表示录制视频,0代表拍照

@property (strong,nonatomic)UIImagePickerController *imagePicker;

@property (strong ,nonatomic)AVPlayer *player;//播放器,用于录制完视频后播放视频

@end


@implementation ViewController

- (IBAction)buttonAction:(id)sender {

    

    if ([UIImagePickerController

         isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

        NSArray *availableMediaTypes = [UIImagePickerController

                                        availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];

        if ([availableMediaTypescontainsObject:(NSString *)kUTTypeMovie]) {

            // 支持视频录制

            _imagePicker=[[UIImagePickerControlleralloc]init];

            _imagePicker.sourceType=UIImagePickerControllerSourceTypeCamera;//设置image picker的来源,这里设置为摄像头

            _imagePicker.cameraDevice=UIImagePickerControllerCameraDeviceRear;//设置使用哪个摄像头,这里设置为后置摄像头

            if (self.isVideo) {

                _imagePicker.mediaTypes=@[(NSString *)kUTTypeMovie];

                _imagePicker.videoQuality=UIImagePickerControllerQualityTypeIFrame1280x720;

                _imagePicker.cameraCaptureMode=UIImagePickerControllerCameraCaptureModeVideo;//设置摄像头模式(拍照,录制视频)

                

            }

            else{

                _imagePicker.cameraCaptureMode=UIImagePickerControllerCameraCaptureModePhoto;

            }

            _imagePicker.allowsEditing=YES;//允许编辑

            _imagePicker.delegate=self;//设置代理,检测操作

            

        }

    }

    

    

    [selfpresentViewController:self.imagePickeranimated:YEScompletion:nil];

    

}

#pragma mark - UIImagePickerController代理方法

//完成

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{

    NSString *mediaType=[infoobjectForKey:UIImagePickerControllerMediaType];

    if ([mediaTypeisEqualToString:(NSString *)kUTTypeImage]) {//如果是拍照

        UIImage *image;

        //如果允许编辑则获得编辑后的照片,否则获取原始照片

        if (self.imagePicker.allowsEditing) {

            image=[info objectForKey:UIImagePickerControllerEditedImage];//获取编辑后的照片

        }else{

            image=[info objectForKey:UIImagePickerControllerOriginalImage];//获取原始照片

        }

        [self.imageViewsetImage:image];//显示照片

        UIImageWriteToSavedPhotosAlbum(image,nil, nil, nil);//保存到相簿

    }elseif([mediaType isEqualToString:(NSString *)kUTTypeMovie]){//如果是录制视频

        NSLog(@"video...");

        NSURL *url=[infoobjectForKey:UIImagePickerControllerMediaURL];//视频路径

        NSString *urlStr=[urlpath];

        if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(urlStr)) {

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

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

        }

        

    }

    

    [selfdismissViewControllerAnimated:YEScompletion:nil];

}


-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{

    NSLog(@"取消");

}


- (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{

    if (error) {

        NSLog(@"保存视频过程中发生错误,错误信息:%@",error.localizedDescription);

    }else{

        NSLog(@"视频保存成功.");

        //录制完之后自动播放

        NSURL *url=[NSURLfileURLWithPath:videoPath];

        _player=[AVPlayerplayerWithURL:url];

        AVPlayerLayer *playerLayer=[AVPlayerLayerplayerLayerWithPlayer:_player];

        playerLayer.frame=self.imageView.frame;

        [self.imageView.layeraddSublayer:playerLayer];

        [_playerplay];

        

    }

}

- (void)viewDidLoad {

    [superviewDidLoad];

    _isVideo=NO;//拍照,反之为YES,为录制视频,顺带保存;    

}

- (void)didReceiveMemoryWarning {

    [superdidReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值