如下圖我們做一個小例子,即點擊左右分別是調用相機拍照和去相冊選取
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.jpg
image5.jpg