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, //相机
UIImagePickerControllerSourceTypeSavedPhotosAlbum //照片库
};
//清晰度
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];
}