iOS相册选取和相机调用代理方法

如下图我们做一个小例子,即点击左右分别是调用相机拍照和去相册选取


iOS相册选取和相机调用代理方法_第1张图片
image1.jpg

首先在头文件中遵守图片选取器的代理如果用到popoverController代理方法的话也要遵守其代理,如果
支持iOS6版本一下设备的话声明一个全局的popoverController,下面会将原因
@interface ViewController()
@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以上版本


iOS相册选取和相机调用代理方法_第2张图片
image2.jpg
iOS相册选取和相机调用代理方法_第3张图片
image3.jpg

image4和image5分别是picker.allowsEditing = YES和picker.allowsEditing = NO的效果

iOS相册选取和相机调用代理方法_第4张图片
image4.jpg

iOS相册选取和相机调用代理方法_第5张图片
image5.jpg

你可能感兴趣的:(iOS相册选取和相机调用代理方法)