iOS中选取照片其实可以很简单
1.5
在1.5版本中,你仅需在基于 EFBaseViewController的控制器中添加如下代码:
1 2 3 4 5 6 7 8 9 10 11 12
| - (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最终版中,可以设定使用相机拍照时默认开始前置还是后置摄像头了,这对于诸如“选取头像”这种功能很有必要。
1
| [self showPhotoPickerWithMessage:@"上传头像" isFront:YES sourceView:sender.view completion:nil];
|
2.0~
新的改进:
iOS 14开始倡导使用 PHPicker来替代 UIImagePickerController,而无需获得用户的照片图库权限,因为全新的 PHPicker采用沙盒机制,App无法直接获取照片图库中的数据,而用户可以看到,并可决定 App可以访问哪些数据。极致框架在2.0最终版中响应了这一举动,不过我们保留了 UIImagePickerController来兼容比 iOS 14更早的软件系统,而开发者无需把精力投入在这个上面,此外,我们还统一了新的选取照片的回调。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| - (IBAction)selectPhoto:(id)sender { [self showPhotoPickerWithMessage:@"上传头像" isCameraDeviceFront:YES]; }
@WeakObject(self); self.photoPickerFinishHandler = ^(id _Nonnull photoPicker, NSArray<UIImage *> *_Nonnull selectPhotos) { @StrongObject(self); if (@available(iOS 14, *)) { if ([photoPicker isMemberOfClass:[UIImagePickerController class]] && UIImagePickerControllerSourceTypeCamera==((UIImagePickerController *)photoPicker).sourceType) { [self dismissViewControllerAnimated:YES completion:nil]; } } else { [self dismissViewControllerAnimated:YES completion:nil]; } [self.avatar_imageView setImage:selectPhotos.firstObject]; };
|
上面的代码只能单选照片,当然怎么少的了多选照片呢,你可以限制选择照片的最大数量,当然也可以不设限制。注意:以下方法只支持 iOS 14及以上版本的系统。
1 2 3 4 5
| [self showPhotoPickerWithMessage:@"上传头像" photoSelectionLimit:9];
[self showPhotoPickerNoPhotoSelectionLimitWithMessage:@"上传头像"];
|
相关
更新内容
- 新增 iOS 14及以上版本系统选取照片更多的方法。
- 统一的选取照片回调。