如下图我们做一个小例子,即点击左右分别是调用相机拍照和去相册选取
image1.jpg
首先在头文件中遵守图片选取器的代理如果用到popoverController代理方法的话也要遵守其代理,如果
支持iOS6版本一下设备的话声明一个全局的popoverController,下面会将原因
@interface ViewController()<UIImagePickerControllerDelegate,UIPopoverControllerDelegate>
@property (nonatomic, strong) UIPopoverController *popViewCtr;
// 新建一个图片选取器控制器对象,并且设置其相关属性
-(void)selectSourceType:(UIImagePickerControllerSourceType)sourceType
{
//判断该设备是否支持调用相机或相册选取(模拟器不支持相机调用,所以直接调用会崩溃)
if (![UIImagePickerController isSourceTypeAvailable:sourceType]) {
return;
}
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.sourceType = sourceType;
picker.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:
sourceType];
picker.allowsEditing = NO;//设置该拍摄或选取的照片是否支持编辑,默认为不编辑
picker.delegate = self;//设置代理
//在iOS6或以下的版本上测试以后发现其只支持popoverController的方式,所以在此需判断设备的iOS版本,
不要问我都现在了怎么还适配iOS6以下版本,宝宝心里苦...
CGFloat version = [[[UIDevice currentDevice] systemVersion] floatValue];
if (version <= 6.0) {
UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:picker];
self.popViewCtr = popover;
//_popViewCtr为全局的popoverController,_commonImageView.bounds为弹出popoverController的view的大小。
[_popViewCtr presentPopoverFromRect:_commonImageView.bounds inView:_commonImageView
permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
[popover release];
} else {
[self presentModalViewController:picker animated: NO];
}
}
#######pragma mark - UIImagePickerControllerDelegate
//相机或相册的选取照片代理方法
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
//在此处如果上面方法中的allowsEditing = NO;那么在此处的info字典中对应的key应该是UIImagePickerControllerOriginalImage
否则应该为UIImagePickerControllerEditedImage(弄错取不到值得哦)。在此我个人在时间后感觉,编辑的总体效果不如不编辑,首先在编
辑后,我们的照片只能是在选取部分照片,再者系统给的正方形选框可编辑的范围也非常有限,所以我会选择不编辑。
UIImage *pickImage = info[UIImagePickerControllerOriginalImage];
[self dismissModalViewControllerAnimated:YES];
}
//相机或相册的取消代理方法
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
[self dismissModalViewControllerAnimated:YES];
}
image2和image3分别是iOS6以及以下版本和iOS6以上版本
image2.jpg image3.jpg
image4和image5分别是picker.allowsEditing = YES和picker.allowsEditing = NO的效果
image4.jpgimage5.jpg
网友评论