UIImagePickerController本地圖片視訊,相機錄影機使用

有稜角的圓發表於2016-05-19

1.新增framework:MobileCoreServices

2.頭:#import <MobileCoreServices/MobileCoreServices.h>

大致程式碼:

 

UIImagePickerController *imagePicker=[[UIImagePickerController alloc]init];;//例項並初始化;
    imagePicker.delegate=self;//影象選擇器委託設定為
    //選取本地movie

        imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        imagePicker.mediaTypes =  [[NSArray alloc] initWithObjects: (NSString *) kUTTypeMovie, nil];
        [self presentViewController:imagePicker animated:YES completion:nil];

    
    //選取本地圖片
        imagePicker.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;
        imagePicker.mediaTypes=[[NSArray alloc] initWithObjects: (NSString *) kUTTypeImage, nil];
         [[UIApplication sharedApplication] setStatusBarHidden:YES];//隱藏狀態列;
        [self presentViewController:imagePicker animated:YES completion:nil];


    //相機
        if ([UIImagePickerController isSourceTypeAvailable:   UIImagePickerControllerSourceTypeCamera]){         

             imagePicker.sourceType=UIImagePickerControllerSourceTypeCamera;
             imagePicker.mediaTypes=[[NSArray alloc] initWithObjects: (NSString *) kUTTypeImage, nil];
             // [[UIApplication sharedApplication] setStatusBarHidden:YES];//隱藏狀態列;
             [self presentViewController:imagePicker animated:YES completion:nil];
        }else{
            NSLog(@"照相機不可用");
        }
       
   //錄影機
        if ([UIImagePickerController isSourceTypeAvailable:   UIImagePickerControllerSourceTypeCamera]){                

            imagePicker.sourceType=UIImagePickerControllerSourceTypeCamera;
            imagePicker.mediaTypes=[[NSArray alloc] initWithObjects: (NSString *) kUTTypeMovie, nil];
             [[UIApplication sharedApplication] setStatusBarHidden:YES];//隱藏狀態列;
            [self presentViewController:imagePicker animated:YES completion:nil];
        }else{
            NSLog(@"照相機不可用");
        }
   3.回撥

 

#pragma mark - UIImagePickerController代理方法
//完成
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
    NSString *mediaType=[info objectForKey:UIImagePickerControllerMediaType];
    if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {//如果是拍照
        UIImage *image;
        //如果允許編輯則獲得編輯後的照片,否則獲取原始照片
        if (self.imagePicker.allowsEditing) {
            image=[info objectForKey:UIImagePickerControllerEditedImage];//獲取編輯後的照片
        }else{
            image=[info objectForKey:UIImagePickerControllerOriginalImage];//獲取原始照片
        }
        [self.photo setImage:image];//顯示照片
        UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);//儲存到相簿
    }else if([mediaType isEqualToString:(NSString *)kUTTypeMovie]){//如果是錄製視訊
        NSLog(@"video...");
        NSURL *url=[info objectForKey:UIImagePickerControllerMediaURL];//視訊路徑
        NSString *urlStr=[url path];
        if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(urlStr)) {
            //儲存視訊到相簿,注意也可以使用ALAssetsLibrary來儲存
            UISaveVideoAtPathToSavedPhotosAlbum(urlStr, self, @selector(video:didFinishSavingWithError:contextInfo:), nil);//儲存視訊到相簿
        }
        
    }

    [self dismissViewControllerAnimated:YES completion:nil];
}
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
    NSLog(@"取消");
}

#pragma mark - 私有方法
-(UIImagePickerController *)imagePicker{
    if (!_imagePicker) {
        _imagePicker=[[UIImagePickerController alloc]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;//設定代理,檢測操作
    }
    return _imagePicker;
}

//視訊儲存後的回撥
- (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{
    if (error) {
        NSLog(@"儲存視訊過程中發生錯誤,錯誤資訊:%@",error.localizedDescription);
    }else{
        NSLog(@"視訊儲存成功.");
        //錄製完之後自動播放
        NSURL *url=[NSURL fileURLWithPath:videoPath];
        _player=[AVPlayer playerWithURL:url];
        AVPlayerLayer *playerLayer=[AVPlayerLayer playerLayerWithPlayer:_player];
        playerLayer.frame=self.photo.frame;
        [self.photo.layer addSublayer:playerLayer];
        [_player play];
        
    }
}


相關文章