#swift #photokit
#swift #photokit
Вопрос:
В WWDC2020 были введены новый PHPickerViewController и новый PHPhotoLibrary.authorizationStatus (ограниченный). Но я получил проблему ниже:
-
когда пользователь нажал кнопку, чтобы отобразить средство выбора нескольких изображений 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 } }
-
функции 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. Какой делегат вы реализуете?