swift5 как отображать только ограниченную библиотеку фотографий после того, как пользователь предоставил ограниченный доступ для выбора некоторых фотографий

#swift #photokit

#swift #photokit

Вопрос:

В WWDC2020 были введены новый PHPickerViewController и новый PHPhotoLibrary.authorizationStatus (ограниченный). Но я получил проблему ниже:

  1. когда пользователь нажал кнопку, чтобы отобразить средство выбора нескольких изображений Apple и отобразить авторизацию запроса в виде кода:

      let requiredAccessLevel: PHAccessLevel = .readWrite
     PHPhotoLibrary.requestAuthorization(for: requiredAccessLevel) { (authorizationStatus) in
           switch authorizationStatus {
           case .authorized:
               DispatchQueue.main.async {
                   self.presentImagePicker()
                }
           case .limited:
               DispatchQueue.main.async {
                   self.presentImagePicker()
                }
           default:
               break
           }
    }
      
  2. функции self.presentImagePicker():

      func presentImagePicker() {
     var configuration = PHPickerConfiguration(photoLibrary: .shared())
     configuration.filter = .images
     configuration.selectionLimit = self.imageCountMax - self.images.count
     let picker = PHPickerViewController(configuration: configuration)
     picker.delegate = self
    
     let accessLevel: PHAccessLevel = .readWrite
     let authorizationStatus = PHPhotoLibrary.authorizationStatus(for: accessLevel)
    
     switch authorizationStatus {
     case .authorized:
         DispatchQueue.main.async {
    
             self.present(picker, animated: true)
         }
     case .limited:
         DispatchQueue.main.async {
             // Here I don't know how to display only limited photo library to users (after user has selected some photos through the limited access)
         }
     default:
         break
     }
      

    }

моя проблема: пожалуйста, смотрите Код 2, case .limited: DispatchQueue.main.async { }, я думаю, мне следует поместить ограниченную библиотеку фотографий в этот блок, но я не знаю, как отображать пользователям только ограниченную библиотеку фотографий.

Ответ №1:

Вы можете использовать этот PHPhotoLibrary.shared().presentLimitedLibraryPicker(from: self) метод для .limited

 DispatchQueue.main.async {
         // Here I don't know how to display only limited photo library to users (after user has selected some photos through the limited access)
        PHPhotoLibrary.shared().register(self)
        PHPhotoLibrary.shared().presentLimitedLibraryPicker(from: self)
     }
  

и после этого вы должны использовать метод делегирования для получения обновленных изображений.

 func photoLibraryDidChange(_ changeInstance: PHChange) {
        let fetchOptions = PHFetchOptions()
        self.allPhotos = PHAsset.fetchAssets(with: .image, options: fetchOptions)
    }

  

Комментарии:

1. У меня такая же проблема. Не могли бы вы объяснить, как вы объявили allPhotos?

2. @Quailcreek : var allPhotos: PHFetchResult<PHAsset> !

3. Какой делегат вы реализуете?