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]; } }