如下圖我們做一個(gè)小例子茎刚,即點(diǎn)擊左右分別是調(diào)用相機(jī)拍照和去相冊(cè)選取
image1.jpg
首先在頭文件中遵守圖片選取器的代理如果用到popoverController代理方法的話也要遵守其代理,如果
支持iOS6版本一下設(shè)備的話聲明一個(gè)全局的popoverController嗡综,下面會(huì)將原因
@interface ViewController()<UIImagePickerControllerDelegate,UIPopoverControllerDelegate>
@property (nonatomic, strong) UIPopoverController *popViewCtr;
// 新建一個(gè)圖片選取器控制器對(duì)象,并且設(shè)置其相關(guān)屬性
-(void)selectSourceType:(UIImagePickerControllerSourceType)sourceType
{
//判斷該設(shè)備是否支持調(diào)用相機(jī)或相冊(cè)選取(模擬器不支持相機(jī)調(diào)用,所以直接調(diào)用會(huì)崩潰)
if (![UIImagePickerController isSourceTypeAvailable:sourceType]) {
return;
}
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.sourceType = sourceType;
picker.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:
sourceType];
picker.allowsEditing = NO;//設(shè)置該拍攝或選取的照片是否支持編輯,默認(rèn)為不編輯
picker.delegate = self;//設(shè)置代理
//在iOS6或以下的版本上測(cè)試以后發(fā)現(xiàn)其只支持popoverController的方式蒿囤,所以在此需判斷設(shè)備的iOS版本贾富,
不要問(wèn)我都現(xiàn)在了怎么還適配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
//相機(jī)或相冊(cè)的選取照片代理方法
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
//在此處如果上面方法中的allowsEditing = NO;那么在此處的info字典中對(duì)應(yīng)的key應(yīng)該是UIImagePickerControllerOriginalImage
否則應(yīng)該為UIImagePickerControllerEditedImage(弄錯(cuò)取不到值得哦)汗捡。在此我個(gè)人在時(shí)間后感覺(jué),編輯的總體效果不如不編輯,首先在編
輯后畏纲,我們的照片只能是在選取部分照片扇住,再者系統(tǒng)給的正方形選框可編輯的范圍也非常有限,所以我會(huì)選擇不編輯盗胀。
UIImage *pickImage = info[UIImagePickerControllerOriginalImage];
[self dismissModalViewControllerAnimated:YES];
}
//相機(jī)或相冊(cè)的取消代理方法
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
[self dismissModalViewControllerAnimated:YES];
}
image2和image3分別是iOS6以及以下版本和iOS6以上版本
image2.jpg
image3.jpg
image4和image5分別是picker.allowsEditing = YES和picker.allowsEditing = NO的效果
image4.jpg
image5.jpg