系統有自帶的圖庫和相機功能,這裏介紹一下如何用代碼打開它們(模擬器是不支持打開相機的)和如何選取本地圖片上傳到圖庫ide
事前準備:工具
#import <AVFoundation/AVFoundation.h> @interface ViewController ()<UINavigationControllerDelegate,UIImagePickerControllerDelegate> { //設置爲全局變量 UIImagePickerController*_pc1; UIImagePickerController*_pc2; }
一.UIImagePickerControllerSourceTypePhotoLibrary圖片庫代理
//初始化 _pc1=[[UIImagePickerController alloc]init]; //類型 PhotoLibrary--圖庫 _pc1.sourceType=UIImagePickerControllerSourceTypePhotoLibrary; //是否容許編輯 _pc1.allowsEditing=YES; //簽署代理 _pc1.delegate=self; //顯示 [self presentViewController:_pc1 animated:YES completion:^{ //顯示完成後執行的代碼 }];
注意:這時運行代碼是不會進入圖庫的,還須要在info.plist文件中,加入code
Privacy - Photo Library Usage Description圖片
在彈出的窗口中,選擇容許,就能夠進入到圖庫頁面了ip
二.UIImagePickerControllerSourceTypeCamera 相機(模擬器是沒法使用的)it
這裏要增長一段判讀語句,判斷當前相機狀態是否可使用io
//判斷當前是否支持相機 //Authorization--受權 Status--地位 //Capture--獲取 Device--工具 //Restricted--受限制 Denied--拒絕 AVAuthorizationStatus authStatus=[AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]; if (authStatus==AVAuthorizationStatusRestricted||authStatus==AVAuthorizationStatusDenied ){ NSLog(@"相機權限受限"); return; } //判斷相機是否能夠正常使用 //Available - 可得到的 if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]==NO) { NSLog(@"相機沒法使用"); return; } _pc2=[[UIImagePickerController alloc]init]; _pc2.sourceType=UIImagePickerControllerSourceTypeCamera; _pc2.delegate=self; _pc2.allowsEditing=YES; [self presentViewController:_pc2 animated:YES completion:^{ //顯示後執行的代碼 }];
三.回調方法圖片上傳
①取消的響應方法import
//點擊了Cancel的響應方法 -(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { //退出當前界面 [_pk dismissViewControllerAnimated:YES completion:^{ }]; }
②圖片回調的方法,能夠用來本地上傳到圖片庫
//選擇圖片回調 -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info { //info是一個字典,儲存的是編輯後的圖片和原圖 //UIImagePickerControllerEditedImage - 編輯後的圖片 //UIImagePickerControllerOriginalImage - 原圖 UIImage *image = info[@"UIImagePickerControllerEditedImage"]; //保存到圖庫 UIImageWriteToSavedPhotosAlbum(image, self, @selector(), nil); [_pk dismissViewControllerAnimated:YES completion:^{ }]; }