UIImagePickerController图像选取器是一种导航控制器类,让你可以在应用程序中添加简单的图像选择功能或者照相机界面。用户会看到一个图像选择屏幕,在其中挑选相片,相片的来源则是他自己的相片库、保存下来的相片集或者照相机。当用户选定一个相片后,就会通过UIImagePickerDelegate 协议中的方法,通知选取器的委托。
你可以用
一、创建并添加到视图中
UIImagePickerController* picker = [[UIImagePickerController alloc]init];
[self.view addSubview:picker.view];
二、图像来源
你可以通过 sourceType 属性设定多种图像来源,呈现给用户:
picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
可以使用下列来源:
enum {
UIImagePickerControllerSourceTypePhotoLibrary,//相片库
UIImagePickerControllerSourceTypeCamera,//照相机
UIImagePickerControllerSourceTypeSavedPhotosAlbum//保存的相片
};
typedef NSUInteger UIImagePickerControllerSourceType;
三、图像编辑
要让用户可以随意移动以及缩放图像,可以将 allowsImageEditing 属性设置为YES,打开图像编辑功能:
picker.allowsEditing=YES;
四、图像选取
当用户选择一个图片之后,选择器的委托会通过 didFinishPickingImage方法接到通知。代理会得到一个包含有该图像的 UIImage对象,如果编辑功能开启的话,还会得到一个包含了编辑属性的NSDictionary。
设置选取器的 delegate ,就可以将一个委托赋予选择器:
picker.delegate =self;
在你的委托类中实现下面的方法,这样当选取一个图像时,委托类就会得到通知:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo{
}
方法的参数包括一个指针,指向报告当前操作的图像选取器控制器,这样你就可以在一个委托中处理多个选取器。参数还包括一个指向UIImage 对象自身的指针,以及一个字典对象,其中包含有关于图像在屏幕上如何被缩放以及移动的信息。
你可能在用户取消图像选择时也想要得到通知。要达到这一目的,要在代理中实现imagePickerControllerDid
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
}
这对iPhone的操作是没有问题的。但是当我们在iPad环境中却有问题了,当我们运行时会报如下错误:
Terminating app due to uncaught exception'NSInvalidArgumentExcepti
所以我们必须通过UIPopoverController来实现才行。具体实现如下:
![](https://img-my.csdn.net/uploads/201301/06/1357437538_9292.jpg)
// 在ipad上使用UIPopoverController
UIImagePickerController* m_imagePicker =[[UIImagePickerController alloc] init];
m_imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[m_imagePicker setAllowsEditing:NO];
UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:m_imagePicker];
[popover presentPopoverFromRect:CGRectMake(0, 0, 0, 0) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];