iOS中选取照片其实可以很简单

iOS中选取照片其实可以很简单

1.5

在极致框架1.5版本中,你仅需在基于 EFBaseViewController的控制器中添加如下代码:

- (IBAction)selectPhoto:(id)sender {
    [self showPhotoPickerWithMessage:@"上传头像" sourceView:sender.view completion:nil];
}

// 选取照片的处理
@WeakObj(self);
self.photoPickerResult = ^(UIImagePickerController *_Nonnull imagePicker, NSDictionary *_Nonnull mediaInfo) {
    @StrongObj(self);
    [self dismissViewControllerAnimated:YES completion:nil];
    
    [self.avatar_imageView setImage:[mediaInfo objectForKey:UIImagePickerControllerOriginalImage]];// 本地演示
};

解析:和其它需要获取隐私权限的功能一样,极致框架很好的封装了获取相机/照片图库隐私权限的代码,并对开发者隐藏了具体的实现,开发者仅需要把注意力投入到怎么对选取的照片处理即可。

在1.5最终版中,可以设定使用相机拍照时默认开始前置还是后置摄像头了,这对于诸如“选取头像”这种功能很有必要。

[self showPhotoPickerWithMessage:@"上传头像" isFront:YES sourceView:sender.view completion:nil];

2.0~

新的改进:
iOS 14开始倡导使用 PHPicker来替代 UIImagePickerController,而无需获得用户的照片图库权限,因为全新的 PHPicker采用沙盒机制,App无法直接获取照片图库中的数据,而用户可以看到,并可决定 App可以访问哪些数据。极致框架在2.0最终版中响应了这一举动,不过我们保留了 UIImagePickerController来兼容比 iOS 14更早的软件系统,而开发者无需把精力投入在这个上面,此外,我们还统一了新的选取照片的回调。

- (IBAction)selectPhoto:(id)sender {
    [self showPhotoPickerWithMessage:@"上传头像" isCameraDeviceFront:YES]; // sourceView 在版本2.0中可选
}

// 选取照片的处理
@WeakObject(self);
self.photoPickerFinishHandler = ^(id _Nonnull photoPicker, NSArray *_Nonnull selectPhotos) {
    @StrongObject(self);
    if (@available(iOS 14, *)) {
        if ([photoPicker isMemberOfClass:[UIImagePickerController class]] && UIImagePickerControllerSourceTypeCamera==((UIImagePickerController *)photoPicker).sourceType) {
            [self dismissViewControllerAnimated:YES completion:nil];
        }
        // PHPickerViewController will dismiss automatically
    } else {
        [self dismissViewControllerAnimated:YES completion:nil];
    }
    
    [self.avatar_imageView setImage:selectPhotos.firstObject];// 本地演示
};

上面的代码只能单选照片,当然怎么少的了多选照片呢,你可以限制选择照片的最大数量,当然也可以不设限制。注意:以下方法只支持 iOS 14及以上版本的系统。

// 限制最多选择9张照片
[self showPhotoPickerWithMessage:@"上传头像" photoSelectionLimit:9];

// 选择照片没有限制
[self showPhotoPickerNoPhotoSelectionLimitWithMessage:@"上传头像"];

相关

  • 详见极致框架官网中获取照片部分的介绍。通过极致框架官网顶部的搜索功能搜索 EFBaseViewController。

许可

  • 本文采用 BY-NC-SA 许可协议。即:署名——转载请注明出处;非商业使用;相同方式传播——再分发的文章许可与原文相同。

查看原文

你可能感兴趣的:(iOS中选取照片其实可以很简单)