Swift: как обрабатывать результаты видео и фото из PHPicker?
Мне нужна возможность для пользователя выбирать несколько фотографий и видео из библиотеки фотографий. (Используя PHPicker) Я уже знаю, как получить изображения с помощью этого:
func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
var contentsData: [Data] = []
for result in results {
if result.itemProvider.canLoadObject(ofClass: UIImage.self) {
result.itemProvider.loadObject(ofClass: UIImage.self) { selectedData, error in
if let error = error {
print("PICKER ERROR: \(error)")
} else {
if let selectedImage = selectedData as? UIImage {
if let selectedImageData = selectedImage.jpegData(compressionQuality: 0.5) {
contentsData.append(selectedImageData)
if contentsData.count == results.count {
self.parent.completion(contentsData)
}
}
}
}
}
}
}
self.parent.presentationMode.wrappedValue.dismiss()
}
Я бы предположил, что мне нужно будет проверить, какой тип данных имеет каждый результат из PHPickerResult, а затем соответственно загрузить каждый объект. Проблема в том, что видеофайл может быть .mov, .mp4 и т. д. Как я могу определить PHPickerResult как видео и соответствующим образом обработать его?
1 ответ
Просто спросите, есть ли у поставщика элементов элемент типа
UTType.movie.identifier
. Если это так, продолжайте и загрузите его, позвонив
loadFileRepresentation(forTypeIdentifier: UTType.movie.identifier)
.
Фактический код:
if prov.hasItemConformingToTypeIdentifier(UTType.movie.identifier) {
self.dealWithVideo(result)
} else if prov.canLoadObject(ofClass: PHLivePhoto.self) {
self.dealWithLivePhoto(result)
} else if prov.canLoadObject(ofClass: UIImage.self) {
self.dealWithImage(result)
}