The QuickLook framework introduced an editing mode
Одна из малоизвестных жемчужин iOS, Quick Look Framework полезна для предварительного просмотра документов в вашем приложении. Во время WWDC 2019 фреймворк получил хорошее обновление с введением режима редактирования.
QLPreviewController
- это контроллер, отвечающий за представление содержимого различных типов в контроллере представления. В настоящее время он поддерживает типы файлов изображений, видео, PDF, CSV и iWork.
QLPreviewItemEditingMode
- это новое дополнение к платформе, которое позволяет нам комментировать изображения и PDF-файлы, а также легко обрезать или конвертировать видео.
QLPreviewItemEditingMode
включает фреймворк PencilKit для редактирования изображений и PDF-файлов.
Наша цель
- Изучение новых дополнений в структуре Quick Look
- Создание приложения для iOS, использующего Quick Look для редактирования документов
- Сохранение отредактированных документов в каталоге документов с помощью
FileManager
Конечный пункт назначения
К концу этой части мы сможем редактировать и сохранять изображения, видео и PDF-файлы, как показано ниже:
Что нового в iOS 13 QuickLook?
Помимо добавления QLPreviewItemEditingMode
, протокол QLPreviewControllerDelegate
вводит три новых необязательных метода делегирования.
Обработка возможностей режима редактирования
Мы можем справиться с режимом редактирования, реализовав следующий метод:
optional func previewController(_ controller: QLPreviewController, editingModeFor previewItem: QLPreviewItem) -> QLPreviewItemEditingMode
В приведенном выше методе мы можем установить тип возвращаемого значения как createCopy
, default
или updateContents
для обработки результатов редактирования соответственно. updateContents
перезаписывает содержимое QLPreviewItems в FileManager
. По умолчанию режим редактирования выключен.
Сохранение отредактированного содержимого
После завершения редактирования мы можем сохранить измененное содержимое, используя следующий дополнительный метод:
func previewController(_ controller: QLPreviewController, didSaveEditedCopyOf previewItem: QLPreviewItem, at modifiedContentsURL: URL)
Вышеупомянутый метод срабатывает, когда EditingMode
равно createsCopy
. Он возвращает URL-адрес измененного содержимого (содержимое находится во временном месте). Затем мы можем выбрать обработку URL-адреса и сохранить его в FileManager
.
Уведомление об отредактированном содержании
Мы можем выбрать обновление пользовательского интерфейса после получения уведомления об успешном обновлении QLPreviewItem. Это срабатывает, когда режим редактирования updatesContent
:
func previewController(_ controller: QLPreviewController, didUpdateContentsOf previewItem: QLPreviewItem)
В следующем разделе мы создадим простое приложение для iOS, которое запускает предварительный просмотр Quick Look с образцами изображения, видео и PDF, которые доступны вместе с исходным кодом. Просто import QuickLook
в вашем ViewController, чтобы начать.
Настройка QLPreviewController
Следующий код используется для представления контроллера Quick Look Preview в ViewController нашего приложения и включения режима редактирования:
@objc func onButtonClick(sender: UIButton){ let previewController = QLPreviewController() previewController.dataSource = self previewController.delegate = self previewController.setEditing(true, animated: true) self.present(previewController, animated: true, completion: nil) }
Затем вам нужно соответствовать протоколам QLPreviewControllerDelegate
, QLPreviewControllerDataSource
и реализовать функции делегирования в вашем классе.
Настройка нашего источника данных
Для источника данных мы создали массив литералов имен файлов, которые будут использоваться для отображения QLPreviewItems
, как показано ниже:
var items : [String] = ["sampleVideo.mp4", "samplePDF.pdf", "sampleImage.png"]
Затем нам нужно реализовать методы протокола источника данных, чтобы отобразить QLPreviewItems
. Следующий код отвечает за отображение файлов источников данных в QLPreviewItems
:
extension ViewController: QLPreviewControllerDataSource { func numberOfPreviewItems(in controller: QLPreviewController) -> Int { return items.count } func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem { print(controller.isEditing) let name = self.items[index] let file = name.components(separatedBy: ".") let path = Bundle.main.path(forResource: file.first!, ofType: file.last!) let url = NSURL(fileURLWithPath: path!) return url as QLPreviewItem } }
Сохранение обновленного содержимого
Наконец, мы добавим дополнительные функции делегирования, чтобы сохранить отредактированное содержимое как копию с помощью FileManager
:
В приведенном выше коде мы получаем путь к файлу, используя modifiedContentsURL
. Используя FileManager, мы сохраняем отредактированный файл в каталог документов нашего приложения.
В результате мы получаем следующее приложение!
Мы настроили наши кнопки, используя новые Системные символы iOS 13.
Заключение
Итак, мы исследовали маленькую жемчужину, которая в значительной степени осталась незамеченной во время WWDC 2019. Режим редактирования Quick Look - интересная функция, поскольку он позволяет нам быстро комментировать PDF-файлы в нашем приложении с помощью встроенного фреймворка PencilKit. Полный исходный код доступен в Репозитории Github.
Вот и все. Надеюсь, вам понравилось читать.