訪問系統(tǒng)相冊(cè)

在iOS中要拍照和錄制視頻最簡(jiǎn)單的方式就是調(diào)用UIImagePickerController,UIImagePickerController繼承與UINavigationController,需要使用代理方法時(shí)需要同時(shí)遵守這兩個(gè)協(xié)議,以前可能比較多的是使用UIImagePickerController來選擇相冊(cè)圖片或者拍攝圖片,其實(shí)它的功能還能用來拍攝視頻。

使用UIImagePickerController拍照或者拍視頻主要以下幾個(gè)步驟:

創(chuàng)建一個(gè)全局的UIImagePickerController對(duì)象。

指定UIImagePickerController的來源sourceType,是來自UIImagePickerControllerSourceTypeCamera相機(jī),還是來自UIImagePickerControllerSourceTypePhotoLibrary相冊(cè)。

然后是設(shè)置mediaTypes媒體類型,這是錄制視頻必須設(shè)置的選項(xiàng),默認(rèn)情況下是kUTTypeImage(注意:mediaTypes的設(shè)置是在MobileCoreServices框架下),同還可以設(shè)置一些其他視頻相關(guān)的屬性,例如:videoQuality視頻的質(zhì)量、videoMaximumDuration視頻的最大錄制時(shí)長(默認(rèn)為10s),cameraDevice攝像頭的方向(默認(rèn)為后置相機(jī))。

指定相機(jī)的捕獲模式cameraCaptureMode,設(shè)置mediaTypes后在設(shè)置捕獲模式,注意的是捕獲模式需要在相機(jī)來源sourceType為相機(jī)時(shí)設(shè)置,否則會(huì)出現(xiàn)crash。

適時(shí)的展示UIImagePickerController,然后在相應(yīng)的代理方法保存和獲取圖片或視頻。

下面還是上代碼吧,更加清晰明了...

首先需要導(dǎo)入以下用到的幾個(gè)頭文件,同時(shí)遵守兩個(gè)代理方法

#import"ViewController.h"#import#import#import@interfaceViewController(){UIImagePickerController*_imagePickerController;}

創(chuàng)建UIImagePickerController對(duì)象

- (void)viewDidLoad {? ? [superviewDidLoad];// Do any additional setup after loading the view, typically from a nib_imagePickerController = [[UIImagePickerControlleralloc] init];? ? _imagePickerController.delegate =self;? ? _imagePickerController.modalTransitionStyle =UIModalTransitionStyleFlipHorizontal;? ? _imagePickerController.allowsEditing =YES;

從攝像頭獲取圖片或視頻

#pragma mark 從攝像頭獲取圖片或視頻- (void)selectImageFromCamera{? ? _imagePickerController.sourceType =UIImagePickerControllerSourceTypeCamera;//錄制視頻時(shí)長,默認(rèn)10s_imagePickerController.videoMaximumDuration =15;//相機(jī)類型(拍照、錄像...)字符串需要做相應(yīng)的類型轉(zhuǎn)換_imagePickerController.mediaTypes = @[(NSString*)kUTTypeMovie,(NSString*)kUTTypeImage];//視頻上傳質(zhì)量//UIImagePickerControllerQualityTypeHigh高清//UIImagePickerControllerQualityTypeMedium中等質(zhì)量//UIImagePickerControllerQualityTypeLow低質(zhì)量//UIImagePickerControllerQualityType640x480_imagePickerController.videoQuality =UIImagePickerControllerQualityTypeHigh;//設(shè)置攝像頭模式(拍照,錄制視頻)為錄像模式_imagePickerController.cameraCaptureMode =UIImagePickerControllerCameraCaptureModeVideo;? ? [selfpresentViewController:_imagePickerController animated:YEScompletion:nil];}

從相冊(cè)獲取圖片或視頻

#pragma mark 從相冊(cè)獲取圖片或視頻- (void)selectImageFromAlbum{//NSLog(@"相冊(cè)");_imagePickerController.sourceType =UIImagePickerControllerSourceTypePhotoLibrary;? ? ? ? [selfpresentViewController:_imagePickerController animated:YEScompletion:nil];}

在imagePickerController:didFinishPickingMediaWithInfo:代理方法中處理得到的資源,保存本地并上傳...

#pragma mark UIImagePickerControllerDelegate//該代理方法僅適用于只選取圖片時(shí)- (void)imagePickerController:(UIImagePickerController*)picker didFinishPickingImage:(UIImage*)image editingInfo:(nullableNSDictionary *)editingInfo {NSLog(@"選擇完畢----image:%@-----info:%@",image,editingInfo);}

//適用獲取所有媒體資源,只需判斷資源類型- (void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{NSString*mediaType=[info objectForKey:UIImagePickerControllerMediaType];//判斷資源類型if([mediaType isEqualToString:(NSString*)kUTTypeImage]){//如果是圖片self.imageView.image = info[UIImagePickerControllerEditedImage];//壓縮圖片NSData*fileData =UIImageJPEGRepresentation(self.imageView.image,1.0);//保存圖片至相冊(cè)UIImageWriteToSavedPhotosAlbum(self.imageView.image,self,@selector(image:didFinishSavingWithError:contextInfo:),NULL);//上傳圖片[selfuploadImageWithData:fileData];? ? ? ? ? ? }else{//如果是視頻NSURL*url = info[UIImagePickerControllerMediaURL];//播放視頻_moviePlayer.contentURL = url;? ? ? ? [_moviePlayer play];//保存視頻至相冊(cè)(異步線程)NSString*urlStr = [url path];dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{if(UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(urlStr)) {UISaveVideoAtPathToSavedPhotosAlbum(urlStr,self,@selector(video:didFinishSavingWithError:contextInfo:),nil);? ? ? ? ? ? }? ? ? ? });NSData*videoData = [NSDatadataWithContentsOfURL:url];//視頻上傳[selfuploadVideoWithData:videoData];? ? }? ? [selfdismissViewControllerAnimated:YEScompletion:nil];}

圖片和視頻保存完畢后的回調(diào)

#pragma mark 圖片保存完畢的回調(diào)- (void) image: (UIImage*) image didFinishSavingWithError:(NSError*) error contextInfo: (void*)contextInf{? ? }#pragma mark 視頻保存完畢的回調(diào)- (void)video:(NSString*)videoPath didFinishSavingWithError:(NSError*)error contextInfo:(void*)contextInf{if(error) {NSLog(@"保存視頻過程中發(fā)生錯(cuò)誤,錯(cuò)誤信息:%@",error.localizedDescription);? ? }else{NSLog(@"視頻保存成功.");? ? }}

以上僅是簡(jiǎn)單功能的實(shí)現(xiàn),還有例如切換前后攝像頭、閃光燈設(shè)置、對(duì)焦、曝光模式等更多功能...

作者:Shelin

鏈接:http://www.itdecent.cn/p/e70a184d1f32

來源:簡(jiǎn)書

著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容