關(guān)于iOS14 訪問相冊權(quán)限問題

iOS14選擇相冊適配問題。

在iOS14之后新增了Limited Photo Library Access 模式,在授權(quán)彈窗中增加了 Select Photo 選項(xiàng)(如圖1,就是第一個(gè)選項(xiàng) ‘選擇照片...’)。
選中之后就跳轉(zhuǎn)到系統(tǒng)的PHPickerViewController進(jìn)行選擇圖片(如圖2)。
如果不適配會(huì)導(dǎo)致一些問題。

圖1 圖2
圖1.jpg
圖2.jpg

具體解決方案,更新API。然后在調(diào)用相機(jī)的時(shí)候,判斷一下是否是limited。如果是的話,我們就給一個(gè)提示(讓他去更改權(quán)限提示),并且可以讓用戶選擇重新選擇可用的照片,具體代碼如下:

在iOS 14新增兩個(gè)API,要更新一下

    /// accessLevel 我們選擇 readWrite 就行了
    @available(iOS 14, *) //獲取當(dāng)前相冊權(quán)限  accessLevel是權(quán)限等級
    open class func authorizationStatus(for accessLevel: PHAccessLevel) -> PHAuthorizationStatus

    @available(iOS 14, *) //發(fā)起相冊權(quán)限請求 accessLevel是權(quán)限等級
    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選擇彈框,點(diǎn)擊 選擇更多照片... 調(diào)用下面代碼。如圖4
                //[[PHPhotoLibrary sharedPhotoLibrary] presentLimitedLibraryPickerFromViewController:self];
            }
        }

點(diǎn)擊 選擇更多照片... 調(diào)用下面代碼。如圖4
[[PHPhotoLibrary sharedPhotoLibrary] presentLimitedLibraryPickerFromViewController:self];

圖3 圖4
圖3
圖4

假如你就簡單的改變一個(gè)頭像,推薦PHPickerViewController,這iOS14之后官方推薦的??蛇ximages,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)
            })
            
        }
        //在回調(diào)中調(diào)用消失方法
        picker.dismiss(animated: true) {
            
        }
    }

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容