Предварительный просмотр загруженного файла прямо в приложении - PullRequest
0 голосов
/ 10 января 2019

Мое приложение имеет опцию загрузки файла, которая загружает файл, используя метод загрузки alamofire. Когда загрузка завершится, мне нужно представить предварительный просмотр файла без сохранения его во внутреннем / облачном хранилище. Как я могу достичь этой WhatsApp, как функция, которая показывает предварительный просмотр после загрузки файла.

func downloadFile(fileUrl: URL) {
    let destination = DownloadRequest.suggestedDownloadDestination(for: .documentDirectory)

    Alamofire.download(fileUrl, to: destination)
        .response(completionHandler: { (downloadResponse) in
            self.dic.url = downloadResponse.destinationURL
            self.dic.uti = downloadResponse.destinationURL!.uti
            let rect = CGRect(x: 0, y: 0, width: 100, height: 100)
            self.dic.presentOpenInMenu(from: rect, in: self.view, animated: true)
        })
}

1 Ответ

0 голосов
/ 10 января 2019

Для предварительного просмотра файла используйте инфраструктуру Apple QuickLook, которая позволяет встроить предварительный просмотр для широкого диапазона типов файлов, включая документы iWork, документы Microsoft Office, PDF-файлы, изображения и т. Д., И все это без написания большого количества кода.

Сначала импортируйте инфраструктуру QuickLook, затем настройте контроллер представления в соответствии с протоколом QLPreviewControllerDataSource.

Ссылка:

  1. https://www.hackingwithswift.com/example-code/libraries/how-to-preview-files-using-quick-look-and-qlpreviewcontroller

  2. https://github.com/gargsStack/QLPreviewDemo

  3. https://www.appcoda.com/quick-look-framework/

Код:

class ViewController: UIViewController {
    var previewItem = URL!

    func downloadFile(fileUrl: URL) {
        let destination = DownloadRequest.suggestedDownloadDestination(for: .documentDirectory)

        Alamofire.download(fileUrl, to: destination)
        .response(completionHandler: { (downloadResponse) in

            let previewController = QLPreviewController()
            previewController.dataSource = self
            self.previewItem = downloadResponse.destinationURL
            self.present(previewController, animated: true, completion: nil)
        })
    }
}

extension ViewController: QLPreviewControllerDataSource {
    func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
        return 1
    }

    func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
       return self.previewItem as QLPreviewItem
    }
}
...