iOS相冊選取和相機調用代理方法

如下圖我們做一個小例子,即點擊左右分別是調用相機拍照和去相冊選取


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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容