UIImagePickerController的使用

来源:互联网 发布:蛟龙600数据 编辑:程序博客网 时间:2024/05/17 22:51

UIImagePickerController的内方法


//当前是否选用了照相机或有没有照相机

+ (BOOL)isSourceTypeAvailable:(UIImagePickerControllerSourceType)sourceType;

     

 // 是否有摄相机,当前摄相机是否可用          

+ (BOOL)isCameraDeviceAvailable:(UIImagePickerControllerCameraDevice)cameraDevice                   NS_AVAILABLE_IOS(4_0); 


// 摄像头设备是否支持闪光灯和手电筒

+ (BOOL)isFlashAvailableForCameraDevice:(UIImagePickerControllerCameraDevice)cameraDevice           NS_AVAILABLE_IOS(4_0); 


+ (NSArray *)availableCaptureModesForCameraDevice:(UIImagePickerControllerCameraDevice)cameraDevice NS_AVAILABLE_IOS(4_0); 


+ (NSArray *)availableMediaTypesForSourceType:(UIImagePickerControllerSourceType)sourceType; 



UIImagePickerController的属性设定

    UIImagePickerController *picker = [[UIImagePickerController alloc] init]; //初始化

    picker.navigationBar.tintColor=[UIColor orangeColor]; //设置导行栏的背影颜色

    picker.delegate = self;     //要实现

    picker.allowsEditing = YES; //所选图片是否可编辑,默认为NO.

    picker.videoMaximumDuration=10;//视频最大的时间长度,默认值是10分钟。

//    picker.showsCameraControls = NO; //是否显示照相机标准的控件库,默认为YES.

//    picker.showsCameraControls=YES; //是否设定相框。

//    picker.cameraOverlayView=self.myView; //你要设定的相框

    picker.sourceType = UIImagePickerControllerSourceTypeCamera; //确定用户界面显示的样式,只有为UIImagePickerControllerSourceTypeCamera时才能引用下面的属性否则是报错(切记)

    picker.videoQuality = UIImagePickerControllerQualityTypeHigh;//拍摄照片的清晰度,只有在照相机模式下可用,默认为1

    picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModeVideo;//可以设置照相机的模式,照相还是录视频,默认照相模式。

    picker.cameraDevice = UIImagePickerControllerCameraDeviceRear;//设置哪个引用摄像头,前置还是后置摄像头.

    picker.cameraFlashMode = UIImagePickerControllerCameraFlashModeOn;//设置闪光灯,只有为后置摄像头才有效。

    [self presentModalViewController:picker animated:YES];

    

    //用户界面显示的样式

    typedef NS_ENUM(NSInteger, UIImagePickerControllerSourceType) {

        UIImagePickerControllerSourceTypePhotoLibrary,    //整个图片库

        UIImagePickerControllerSourceTypeCamera,          //相机

        UIImagePickerControllerSourceTypeSavedPhotosAlbu//照片库

    };

    

   //清晰度

    typedef NS_ENUM(NSInteger, UIImagePickerControllerQualityType) {

        UIImagePickerControllerQualityTypeHigh = 0,       // highest quality

        UIImagePickerControllerQualityTypeMedium = 1,     // medium quality, suitable for transmission via Wi-Fi

        UIImagePickerControllerQualityTypeLow = 2,         // lowest quality, suitable for tranmission via cellular network

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0

        UIImagePickerControllerQualityType640x480 = 3   // VGA quality

#endif

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_5_0

        UIImagePickerControllerQualityTypeIFrame1280x720 = 4,

        UIImagePickerControllerQualityTypeIFrame960x540 = 5

#endif

    };

    

    //相机的模式

    typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraCaptureMode) {

        UIImagePickerControllerCameraCaptureModePhoto,

        UIImagePickerControllerCameraCaptureModeVideo

    };

    

    //前置还是后置摄像头选择

    typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraDevice) {

        UIImagePickerControllerCameraDeviceRear,

        UIImagePickerControllerCameraDeviceFront

    };

    

    //闪光灯

    typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraFlashMode) {

        UIImagePickerControllerCameraFlashModeOff  = -1,

        UIImagePickerControllerCameraFlashModeAuto = 0,

        UIImagePickerControllerCameraFlashModeOn   = 1

    };


UIImagePickerController的代理方法

 

#pragma mark –

#pragma mark Camera View Delegate Methods

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage*)image editingInfo:(NSDictionary *)editingInfo{

    NSLog(@"1111");

}


- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{

    for (id a in info) {

        NSLog(@"a=%@",a);

        NSLog(@">>>%@",[info objectForKey:a]);

    }

    //    info中包括选取的照片,视频的主要信息

    //    NSString *const UIImagePickerControllerMediaType;        //选取的类型 public.image public.movie

    //    NSString *const UIImagePickerControllerOriginalImage;    //修改前的UIImage object.

    //    NSString *const UIImagePickerControllerEditedImage;      //修改后的UIImage object.

    //    NSString *const UIImagePickerControllerCropRect;         //原始图片的尺寸NSValue object containing a CGRect data type

    //    NSString *const UIImagePickerControllerMediaURL;         //视频在文件系统中  NSURL地址

    

    NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];

    if ([mediaType isEqualToString:@"public.image"]) //是否为图片件

    {

        UIImage *selectedImage = [info objectForKey:UIImagePickerControllerEditedImage];//选择图片

        NSLog(@"selectedImage%@",selectedImage);

        self.myImageView.image = selectedImage;    //将获取到的图片设为背景

    }

    else if ([mediaType isEqualToString:@"public.movie"])//是否为视频件

    {

        

    }

    [self dismissModalViewControllerAnimated:YES];

}



- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {

    [picker dismissModalViewControllerAnimated:YES];

}



 

//以上的介绍对于iPhone的操作是没有问题的。但是当我们在iPad环境中却有问题了,当我们运行时会报如下错误:

//

//Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'On iPad, UIImagePickerController must be presented via UIPopoverController'

//

//所以我们必须通过UIPopoverController来实现才行。具体实现如下:

 

#pragma mark-UIActionSheetDelegate

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{

    NSLog(@"%d",actionSheet.numberOfButtons);

    

    if (actionSheet.numberOfButtons==buttonIndex+1) {

        return;

    }

    

    //先设定sourceType,判断相机是否可用(ipod)没相机,不可用将sourceType设定为相片库

    UIImagePickerControllerSourceType sourceType;

    if (buttonIndex==0) {

        if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

            sourceType = UIImagePickerControllerSourceTypeCamera       }

        else{

            sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

        }

    }

    else if (buttonIndex==1) {

        sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

    }

    

    UIImagePickerController *picker = [[UIImagePickerControlleralloc] init];

    picker.navigationBar.tintColor=[UIColor orangeColor];

    picker.delegate = self;

    picker.allowsEditing = YES;

    picker.sourceType = sourceType;

    UIPopoverController *popover = [[UIPopoverController alloc]initWithContentViewController:picker];

    self.popoverController = popover;    

    [self.popoverControllerpresentPopoverFromRect:CGRectMake(0, 0, 300, 300)

                                       inView:self.view

                     permittedArrowDirections:UIPopoverArrowDirectionAny

                                     animated:YES];

    [popover release];

    [picker release];

 

//    这里需要注意,对局部UIPopoverController对象popover我们赋给了一个全局的UIPopoverController对象popoverController。而不能直接调用popover。因为在popover对象还可见时,是不能够被释放的。

}


- (void)saveImage:(UIImage *)image {

    self.foodImageView.image=image;

   self.foodImageView.frame=CGRectMake(self.foodImageView.frame.origin.x,self.foodImageView.frame.origin.y, image.size.width*(self.foodImageView.frame.size.height/image.size.height),self.foodImageView.frame.size.height);

    

    NSLog(@"保存");

}

#pragma mark –

#pragma mark Camera View Delegate Methods

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    [self.popoverController dismissPopoverAnimated:NO];

    UIImage *image = [[infoobjectForKey:UIImagePickerControllerEditedImage] retain];

    [self performSelector:@selector(saveImage:)

               withObject:image

               afterDelay:0.5];

    [image release];

    

}

- (void)imagePickerControllerDidCancel:(UIImagePickerController*)picker {

    [self.popoverController dismissPopoverAnimated:YES];

}

0 0
原创粉丝点击