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用于对照片进行编辑。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值