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

Как мне отфильтровать изображения, показанные в PHPickerViewController, на изображения, выбранные пользователем с ограниченным доступом? Или мне нужно использовать другой сборщик? Я борюсь с этим уже несколько дней. Любая помощь будет оценена по достоинству. Заранее спасибо.

Когда пользователь нажимает кнопку:1-5 автоматически

  1. Предупреждение появляется с камерой или библиотекой фотографий.

  2. Они выбирают библиотеку фотографий

  3. Появляется предупреждение об авторизации с указанием «Выбрать фото…», «Разрешить доступ ко всем фотографиям» или «Не разрешать».

  4. Они нажимают Select Photos = .limited.

  5. Отображается presentLimitedLibraryPicker, где пользователь выбирает фотографии, которые он хочет разрешить, и нажимает Готово.

  6. Теперь я хочу, чтобы появилось средство выбора с отфильтрованным выбором изображений, которые только что выбрал пользователь. Похоже, это тоже будет автоматически. Нет...

Это отображает только то же средство выбора, в котором пользователь сделал выбор для ограниченного доступа.

      PHPhotoLibrary.shared().presentLimitedLibraryPicker(from: self)

Что входит в случай .limited?

      var config = PHPickerConfiguration()
config.selectionLimit = 1
config.filter = PHPickerFilter.any(of: [.images, .livePhotos])
let picker_Photo = PHPickerViewController(configuration: config)
picker_Photo.delegate = self

let libCell = UIAction(title: "Photo Library", image: UIImage(systemName: "photo"), identifier: .none, discoverabilityTitle: .none) { (libAction) in
                
    if UIImagePickerController.isSourceTypeAvailable(.photoLibrary)
    {
        PHPhotoLibrary.requestAuthorization(for: .readWrite) { status in
            
            switch status
            {
            case .limited:
                DispatchQueue.main.async
                {
                    // PHPhotoLibrary.shared().register(self)
                    // PHPhotoLibrary.shared().presentLimitedLibraryPicker
                    self.present(picker_Photo, animated: true, completion: nil)
                }
                
            case .authorized:
                DispatchQueue.main.async
                {
                    self.present(picker_Photo, animated: true, completion: nil)
                }
                
            case .notDetermined:
                DispatchQueue.main.async
                {
                    self.present(picker_Photo, animated: true, completion: nil)
                }
                
            case .restricted:
                self.view.sendConfirmationAlert(theTitle: "Photo Library Restricted",
                                                theMessage: "Photo Library access was previously denied. Please update your Settings to allow access.", buttonTitle: "Ok")
                
            case .denied:
                let settingsAlert = UIAlertController(title: "Photo Library Access Denied",
                                                      message: "Photo Library access was previously denied. Please update your Settings to allow access.", preferredStyle: .alert)
                
                let settingsAction = UIAlertAction(title: "Go to Settings", style: .default) { ( action ) in
                    let settingsUrl = URL(string: UIApplication.openSettingsURLString)
                    UIApplication.shared.open(settingsUrl!, options: [:])
                }
                let cancelAction = UIAlertAction(title: "Cancel", style: .cancel)
                DispatchQueue.main.async
                {
                    settingsAlert.addAction(settingsAction)
                    settingsAlert.addAction(cancelAction)
                    self.present(settingsAlert, animated: true)
                }
                
            default:
                return
            }
        }
    }
}

1 ответ

Вы ошибаетесь насчет того, что означает ограниченный доступ. Он ограничивает то, какую информацию вы можете читать и записывать в библиотеку фотографий .

Но ваш код вообще не читает из библиотеки фотографий. Ты говоришь

      config = PHPickerConfiguration()

Это означает, что у вас вообще нет доступа к библиотеке фотографий через средство выбора. Вы можете получить только копии изображений. Поэтому вам не нужно никаких разрешений, чтобы показывать средство выбора, и ограничение пользователя не имеет для вас никакого значения . Фактически, вы можете просто выбросить весь свой код авторизации; это не имеет никакого эффекта. Ваш сборщик без него будет работать точно так же.

Если вам нужен доступ к библиотеке фотографий с помощью средства выбора, вы бы позвонили

https://developer.apple.com/documentation/photokit/phpickerconfiguration/3616114-init

В этом случае для вас будет иметь значение ограничение пользователя - когда вы попытаетесь получить доступ к фактическому PHAsset. Но ваш код никогда этого не делает. Вы просите разрешение, которое вам не нужно.

Другие вопросы по тегам