关于iOS14 访问相册权限问题_chenzhen_0907的博客-程序员宝宝

技术标签: java  vue  android  ios  设计模式  

iOS14选择相册适配问题。

在iOS14之后新增了Limited Photo Library Access 模式,在授权弹窗中增加了 Select Photo 选项(如图1,就是第一个选项 ‘选择照片...’)。
选中之后就跳转到系统的PHPickerViewController进行选择图片(如图2)。
如果不适配会导致一些问题。

图1 图2
图1.jpg
图2.jpg

具体解决方案,更新API。然后在调用相机的时候,判断一下是否是limited。如果是的话,我们就给一个提示(让他去更改权限提示),并且可以让用户选择重新选择可用的照片,具体代码如下:

在iOS 14新增两个API,要更新一下

/// accessLevel 我们选择 readWrite 就行了
    @available(iOS 14, *) //获取当前相册权限  accessLevel是权限等级
    open class func authorizationStatus(for accessLevel: PHAccessLevel) -> PHAuthorizationStatus

    @available(iOS 14, *) //发起相册权限请求 accessLevel是权限等级
    open class func requestAuthorization(for accessLevel: PHAccessLevel, handler: @escaping (PHAuthorizationStatus) -> Void)

然后在你的相册中添加下面判断代码

var authorizationStatus = PHPhotoLibrary.authorizationStatus()
        if #available(iOS 14, *) {
            authorizationStatus = PHPhotoLibrary.authorizationStatus(for: .readWrite)
        }
        if #available(iOS 14, *) {
            if authorizationStatus == .limited {
                //这里可以添加提示 。代码我就不放了如图3
                
                //还可以添加UIAlertController选择弹框,点击 选择更多照片... 调用下面代码。如图4
                //[[PHPhotoLibrary sharedPhotoLibrary] presentLimitedLibraryPickerFromViewController:self];
            }
        }

点击 选择更多照片... 调用下面代码。如图4[[PHPhotoLibrary sharedPhotoLibrary] presentLimitedLibraryPickerFromViewController:self];

图3 图4
图3
图4

假如你就简单的改变一个头像,推荐PHPickerViewController,这iOS14之后官方推荐的。可选images,videos,livePhotos

if #available(iOS 14.0, *) {
            var configuration = PHPickerConfiguration.init()
            configuration.filter = PHPickerFilter.any(of: [PHPickerFilter.images,PHPickerFilter.videos,PHPickerFilter.livePhotos])
            configuration.selectionLimit = 1
            
            let picker = PHPickerViewController.init(configuration: configuration)
            picker.delegate = self
            picker.view.backgroundColor = UIColor.blue
            picker.modalPresentationStyle = .fullScreen
            self.present(picker, animated: true) {
                
            }
        }

    //MARK: PHPickerViewControllerDelegate
    func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
        if results.count == 0 {
            return
        }
        let itemProvider = results.first?.itemProvider
        if itemProvider?.canLoadObject(ofClass: UIImage.classForCoder() as! NSItemProviderReading.Type) == true {
            
            itemProvider?.loadObject(ofClass: UIImage.classForCoder() as! NSItemProviderReading.Type, completionHandler: { object, error in
                
                print(object as Any)
            })
            
        }
        //在回调中调用消失方法
        picker.dismiss(animated: true) {
            
        }
    }
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_36724920/article/details/119450410

智能推荐

MainDex 优化记_weixin_33828101的博客-程序员宝宝

如果你对本文感兴趣,也许你对我的公众号也会有兴趣,可扫下方二维码或搜索公众微信号:mxszggtips: 本文基于 AGP 3.0.1 源码分析MainDex 打入规则分析MainDex 瘦身容易忽略的地方其它优化MainDex 打入规则分析“maindex method 超过 65536 了,咋被打爆了呢?”在过去很长一段时间内我们的应用 maindex ...

虚拟机的IP变为127.0.0.1导致Hadoop服务启动失败_会有钱的-_-的博客-程序员宝宝

Hadoop服务启动失败今天启动Hadoop时,终端报了一个新的错误Starting namenodes on [192.168.19.128]192.168.19.128: ssh: connect to host 192.168.19.128 port 22: Network is unreachableStarting datanodesStarting secondary namenodes [zc-virtual-machine]我使用ifconfig命令查看了虚拟机IP,惊奇地发

Mysql8.0修改数据存储位置 - SELinux is preventing /usr/sbin/mysqld from write access on the directory mysql._Fang-的博客-程序员宝宝

MySQL 默认安装将 /var/lib/mysql 作为数据存储目录,可以通过登录 mysql 查看 datadir 变量的值,或者查看 /etc/my.cnf 文件查看: mysql> SHOW VARIABLES like 'datadir'; +---------------+--------------------+ | Variable_name | Value | +---------------+---------------...

C 与VC_xsh118的博客-程序员宝宝

http美国队长2://hi.baidu.com/isyangjunyong/blog/item/c27b8c0624ec8b7c02088191.htmlC++ C++语言是一种良好的面向对象程序设计语言,它在C语言的基础上长大而来,但它比C语言更容易为人们进修和掌握。C++以其独特的语言机制在计 算机科学的各个领域中得到了广泛的应用。面向对象的设计思想是在原来结构化程序设计方法基础上的

2019最新出国考试内容_意哥哥的博客-程序员宝宝

2019年出国留学最新考试内容,出国留学对于很多同学来说也是一个提高自己的好选择。去另一个国家学习,不仅可以收获更多的知识,同时也可以体验他国文化,丰富个人阅历。如今,每年有越来越多的人选择出国留学高中毕业和本科毕业生刚有出国留学想法时,不知道如何选择语言的学习,下面川外老师给大家详解下留学需要哪些语言,学生们可从选择的留学国家,选择语言学习。一.北美地区:加拿大、美国(一)托福考试(The ...

CentOS64位下python2.6升级到2.7的详细教程_中国良辰的博客-程序员宝宝

本文在查阅了很多网上关于python升级的相关资料后,进行了详细的汇总,并在centos64位系统亲自测试成功

随便推点

[LibreOJ Round #11]Misaka Network 与测试_StaroForgin的博客-程序员宝宝

Misaka Network 与测试题解其实是很简单的一道二分图匹配,是谁拿着网络流在哪里瞎想应该很容易发现,对于任何为222的妹妹,拿出来单独作矩阵都一定是最优的。因为如果有任何一种选择方法包含了这个妹妹,都不会超过将其拿出来的贡献。同理,对于任何一对相邻的1,31,31,3,都应该将其连在一起,所以我们只用去考虑如何将111与333相连。于是就很自然的想到了二分图匹配,将111与333划作图的两侧,在相邻的111与333间连边,然后跑匈牙利,看能够匹配出多少对111和333,在加上222的个数

HtmlUnit2.14使用样例—获取动态网页_shihlei的博客-程序员宝宝

编写不易,转载请注明(http://shihlei.iteye.com/blog/2067707)!一 概述     HttpClient适合处理静态资源,网络爬虫等类似应用很大程度需要处理动态网页(内容有js填充,如百度图片,body里基本没有数据,碰到最麻烦的是新浪微博列表页)。将网页下载后,结合JS和Dom模型还原网页,我目前还未攻破,但在下载层还原网页,HtmlUnit是一...

linux(2)_郭俊强的博客-程序员宝宝

mac连接ssh工具:终端输入:ssh 身份@公网ipssh [email protected]检查yum源是否可用:yum list更新/安装 yum:yum update -y安装nodejs:yum install -y nodejs安装nginx:yum install -y nginxnginx一般的目录在etv/nginx重启nginx:systemctl restart nginx查看/结束系统正在运行的进程:..

字符流Reader和Writer_万凌峰的博客-程序员宝宝

字符流原理    Reader是字符输入流的父类。    Writer是字符输出流的父类。    字符流是以字符(char)为单位读写数据的。一次处理一个unicode.    字符流的底层仍然是基本的字节流。        字符流封装了字符的编码解码算法。Reader的常用方法    int read():读取一个字符,返回的Int值"低16"位有效。    int read(char[] ch...

Data Structures and Algorithms7-18——Hashing - Hard Version_清風逐尘乀的博客-程序员宝宝

我的Data Structures and Algorithms代码仓:https://github.com/617076674/Data-Structures-and-Algorithms原题链接:https://pintia.cn/problem-sets/16/problems/680题目描述:知识点:哈希表、拓扑排序思路:拓扑排序解决哈希冲突的线性探测法:当得到...

【pytorch目标检测】创新之作:Fast R-CNN算法解读_Stephen-Chen的博客-程序员宝宝_fast-rcnn

背景2015年,提出了Fast RCNN算法,训练步骤实现端到端,CNN:基于VGG6.Fast R-CNN是基于R-CNN和SPPnets进行的改进成果:训练速度比RCNN块9倍,测试速度快乐23倍,准确率68.4%**SPPnets网络 **解决了:重复卷积计算和固定输出尺度的两个问题Spatial Pyramid Pooling 空间金字塔池化创新点:在于计算整幅图像的the shared feature map,然后根据object proposal在shared feature &

推荐文章

热门文章

相关标签