1.
#import <PhotosUI/PhotosUI.h>
Info.plist 中设置
“PHPhotoLibraryPreventAutomaticLimitedAccessAlert”的值为 YES 来阻止该弹窗反复弹出
2.iOS14之后获取相册授权状态的方法
1 2 3 4 5 6 7 8 9 10 11 12 | if (@available(iOS 14, *)) { [PHPhotoLibrary requestAuthorizationForAccessLevel:PHAccessLevelReadWrite handler:^(PHAuthorizationStatus status) { dispatch_async(dispatch_get_main_queue(), ^{ ///用户已授权此应用程序有限的照片库访问权限 if (status == PHAuthorizationStatusLimited) { } else { } }); }]; } |
3.第一种使用方法,和QQ一样,推荐使用
不在 Info.plist 阻止弹窗弹出, 使用监听获取回调
1 2 3 4 5 6 7 8 9 10 11 12 13 | 1. 实现PHPhotoLibraryChangeObserver @ interface AddWatermarkViewController ()<PHPhotoLibraryChangeObserver> 2. 注册监听 - ( void )viewDidLoad { [super viewDidLoad]; [[PHPhotoLibrary sharedPhotoLibrary] registerChangeObserver:self]; }4. 注销监听 - ( void )viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; [[PHPhotoLibrary sharedPhotoLibrary] unregisterChangeObserver:self]; } |
/// PHPhotoLibrary监听: 选择图片之后的回调
#pragma mark- PHPhotoLibraryChangeObserver
- (void)photoLibraryDidChange:(PHChange *)changeInstance{
///一定要在主线程刷新:这里是异步监听
dispatch_async (dispatch_get_main_queue (), ^{
[self reloadSelectedAssetCollection:nil];
});
}
2.自定义控制器,此方法选了之后去 设置中查看, 还是没效果。。 原因待查
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | 1. 设置代理 PHPickerViewControllerDelegate @ interface AddWatermarkViewController ()< PHPickerViewControllerDelegate> 2.手动显示弹窗 - ( void )showAlert{ @WeakObj(self); if (@available(iOS 14, *)) {<br> ///14之后想着授权状态方法:异步的 [PHPhotoLibrary requestAuthorizationForAccessLevel:PHAccessLevelReadWrite handler:^(PHAuthorizationStatus status) { dispatch_async(dispatch_get_main_queue(), ^{ @StrongObj(self); if (status == PHAuthorizationStatusLimited) { PHPickerConfiguration *configuration = [[PHPickerConfiguration alloc] init]; configuration.filter = [PHPickerFilter imagesFilter]; // 可配置查询用户相册中文件的类型,支持三种 imagesFilter 表示 只显示图片 configuration.selectionLimit = 0; // 默认为1,为0时表示可多选。 PHPickerViewController *picker = [[PHPickerViewController alloc] initWithConfiguration:configuration]; picker. delegate = self; [self presentViewController:picker animated:YES completion:nil]; } }); }]; } } //点击取消或者完成的回调 - ( void )picker:(PHPickerViewController *)picker didFinishPicking:(NSArray<PHPickerResult *> *)results API_AVAILABLE(ios(14)){ [picker dismissViewControllerAnimated:YES completion:nil]; if (!results || !results.count) { return ; } [self reloadSelectedAssetCollection:self.selectedAssetCollection]; NSLog( @"didFinishPicking" ); } |
参考:
iOS14 适配 先行者
https://www.jianshu.com/p/a0b0303962bb
iOS14 隐私适配及部分解决方案
https://www.jianshu.com/p/1803bd950b90?devtype=android
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现