iOS UIImagePickerController的用法

來源:互聯網
上載者:User

標籤:des   style   blog   http   color   io   os   使用   ar   

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:UIImagePickerControllerCameraDeviceRear];
    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用於對照片進行編輯。

 

原文串連:http://blog.csdn.net/kingsley_cxz/article/details/9157093

iOS UIImagePickerController的用法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.