UIImagePickerController詳解

原文鏈接:點擊打開鏈接

1.UIImagePickerController的靜態方法: 
    imagepicker = [[UIImagePickerController alloc]init]; 
     //UIImagePickerController靜態方法判斷設備是否支持照相機/圖片庫/相冊功能 
    /* 
      typedef NS_ENUM(NSInteger, UIImagePickerControllerSourceType) { 
      UIImagePickerControllerSourceTypePhotoLibrary,       UIImagePickerControllerSourceTypeCamera, 
      UIImagePickerControllerSourceTypeSavedPhotosAlbum       };       */ 
     BOOL isCameraSupport = [UIImagePickerController 
isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];      NSLog(@"support camera:%d",isCameraSupport);       
     //UIImagePickerController靜態方法判斷設備是否支持前置攝像頭/後置攝像頭 
    /* 
      typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraDevice) { 
      UIImagePickerControllerCameraDeviceRear,       UIImagePickerControllerCameraDeviceFront       };       */ 
     BOOL isRearSupport = [UIImagePickerController 
isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear]; 
     NSLog(@"rear support:%d",isRearSupport);       
     //UIImagePickerController靜態方法判斷設備是否支持前置攝像


頭閃光燈/後置攝像頭閃光燈 
    /* 
      typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraDevice) { 
      UIImagePickerControllerCameraDeviceRear,       UIImagePickerControllerCameraDeviceFront       };       */ 
     BOOL isFlushSupport = [UIImagePickerController 
isFlashAvailableForCameraDevice:UIImagePickerControllerCameraDeviceRear]; 
     NSLog(@"rear flash support:%d",isFlushSupport);       
     //UIImagePickerController靜態方法返回前置攝像頭/後置攝像頭支持的拍攝類型 
    /* 
      typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraDevice) { 
      UIImagePickerControllerCameraDeviceRear,       UIImagePickerControllerCameraDeviceFront       };       */ 
     //返回類型有照片和視頻 
    /* 
      enum { 
      UIImagePickerControllerCameraCaptureModePhoto,       UIImagePickerControllerCameraCaptureModeVideo       }; 
      typedef NSUInteger 
UIImagePickerControllerCameraCaptureMode;       */ 
     NSArray* captureModes = [UIImagePickerController 
availableCaptureModesForCameraDevice:UIImagePickerControllerC

ameraDeviceRear]; 
     for (NSNumber* mode in captureModes) { 
         NSLog(@"capture modes:%d",[mode integerValue]);      }       
     //UIImagePickerController靜態方法返回照相機/相冊/照片庫所支持的媒體類型 
    /* 
      typedef NS_ENUM(NSInteger, UIImagePickerControllerSourceType) { 
      UIImagePickerControllerSourceTypePhotoLibrary,       UIImagePickerControllerSourceTypeCamera, 
      UIImagePickerControllerSourceTypeSavedPhotosAlbum       };       */ 
     //返回類型有kUTTypeMovie,kUTTypeImage,其他類型均在<MobileCoreServices/MobileCoreServices.h>下 
    NSArray* mediaTypes = [UIImagePickerController 
availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera]; 
     for (NSString* type in mediaTypes) {          NSLog(@"media types:%@",type);      } 
 
2.UIImagePickerController屬性詳解:     //指定使用照相機模式,可以指定使用相冊/照片庫 
    imagepicker.sourceType = 
UIImagePickerControllerSourceTypeCamera; 
     //設置當拍照完或在相冊選完照片後,是否跳到編輯模式進行圖片剪裁。只有當showsCameraControls屬性爲true時纔有效果

    imagepicker.allowsEditing = YES; 
     //設置拍照時的下方的工具欄是否顯示,如果需要自定義拍攝界面,則可把該工具欄隱藏 
    imagepicker.showsCameraControls  = YES;      //設置使用後置攝像頭,可以使用前置攝像頭     imagepicker.cameraDevice = 
UIImagePickerControllerCameraDeviceRear;      //設置閃光燈模式 
    /* 
      typedef NS_ENUM(NSInteger, 
UIImagePickerControllerCameraFlashMode) { 
      UIImagePickerControllerCameraFlashModeOff  = -1,       UIImagePickerControllerCameraFlashModeAuto = 0,       UIImagePickerControllerCameraFlashModeOn   = 1       };       */ 
     imagepicker.cameraFlashMode = 
UIImagePickerControllerCameraFlashModeAuto;      //設置相機支持的類型,拍照和錄像 
     imagepicker.mediaTypes = 
@[(NSString*)kUTTypeImage,(NSString*)kUTTypeMovie]; 
     //設置拍攝時屏幕的view的transform屬性,可以實現旋轉,縮放功能 
   // imagepicker.cameraViewTransform = 
CGAffineTransformMakeRotation(M_PI*45/180);     // imagepicker.cameraViewTransform = CGAffineTransformMakeScale(1.5, 1.5); 
     //所有含有cameraXXX的屬性都必須要sourceType是
UIImagePickerControllerSourceTypeCamera時設置纔有效果,否則會有異常

    //設置UIImagePickerController的代理     imagepicker.delegate = self; -(void)showCamera{ 
     //用模態方式呈現imagepicker 
     [self presentModalViewController:imagepicker animated:YES];  } 
 
使用 imagepicker.cameraViewTransform = 
CGAffineTransformMakeRotation(M_PI*45/180);旋轉45度的效果: 使

imagepicker.cameraViewTransform 

CGAffineTransformMakeScale(1.5, 1.5);全屏的效果,同時imagepicker.showsCameraControls  =NO;隱藏工具欄: 
使用imagepicker.allowsEditing = YES;出現的圖片編輯效果,只有當
imagepicker.showsCameraControls  = YES;纔有效果: 使

 
imagepicker.mediaTypes 

@[(NSString*)kUTTypeImage,(NSString*)kUTTypeMovie];支持拍照和視頻的前後對比效果: 
3.UIImagePickerController回調詳解: 
//成功獲得相片還是視頻後的回調 
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ 
     //通過UIImagePickerControllerMediaType判斷返回的是照片還是視頻 
    NSString* type = [info 
objectForKey:UIImagePickerControllerMediaType]; 

//如果返回的type等於kUTTypeImage,代表返回的是照片,並且需要判斷當前相機使用的sourcetype是拍照還是相冊 
    if ([type 
isEqualToString:(NSString*)kUTTypeImage]&&picker.sourceType==UIImagePickerControllerSourceTypeCamera) {          //獲取照片的原圖 
        UIImage* original = [info 
objectForKey:UIImagePickerControllerOriginalImage];          //獲取圖片裁剪的圖 
        UIImage* edit = [info 
objectForKey:UIImagePickerControllerEditedImage];          //獲取圖片裁剪後,剩下的圖 
        UIImage* crop = [info 
objectForKey:UIImagePickerControllerCropRect];          //獲取圖片的url 
         NSURL* url = [info 
objectForKey:UIImagePickerControllerMediaURL];          //獲取圖片的metadata數據信息 
        NSDictionary* metadata = [info 
objectForKey:UIImagePickerControllerMediaMetadata]; 
         //如果是拍照的照片,則需要手動保存到本地,系統不會自動保存拍照成功後的照片 
        UIImageWriteToSavedPhotosAlbum(edit, self, 
@selector(image:didFinishSavingWithError:contextInfo:), nil);      }else{            } 
     //模態方式退出uiimagepickercontroller 
     [imagepicker dismissModalViewControllerAnimated:YES];

 } 
//取消照相機的回調 
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{ 
     //模態方式退出uiimagepickercontroller 
     [imagepicker dismissModalViewControllerAnimated:YES];  } 
//保存照片成功後的回調 
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error 
   contextInfo:(void *)contextInfo{       
     NSLog(@"saved..");  } 
 
4.自定義相機拍照畫面: 
   //設置拍照時的下方的工具欄是否顯示,如果需要自定義拍攝界面,
則可把該工具欄隱藏 
    imagepicker.showsCameraControls  = NO; 
    UIToolbar* tool = [[UIToolbar alloc]initWithFrame:CGRectMake(0, self.view.frame.size.height-55, self.view.frame.size.width, 75)];      tool.barStyle = UIBarStyleBlackTranslucent;      UIBarButtonItem* cancel = [[UIBarButtonItem 
alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelCamera)]; 
     UIBarButtonItem* add = [[UIBarButtonItem 
alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(savePhoto)]; 
     [tool setItems:[NSArray arrayWithObjects:cancel,add, nil]];     //把自定義的view設置到imagepickercontroller的overlay屬性中

imagepicker.cameraOverlayView = tool; 
 
 -(void)cancelCamera{ 
     [imagepicker dismissModalViewControllerAnimated:YES];  } 
 -(void)savePhoto{      //拍照,會自動回調- 
(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info,對於自定義照相機界面,拍照後回調可以不退出實現連續拍照效果     [imagepicker takePicture];  } 
5.UIImagePickerController是繼承
UINavigationController,所以可以push和pop一些viewcontroller進行導航效果。例如,自定義照相機畫面的時候可以在拍攝完後push一個viewcontroller用於對照片進行編輯。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章