Есть ли конкретный способ прослушать завершение загрузки PDFDocument или PDFView? - PullRequest
0 голосов
/ 25 мая 2018

Я реализовал пользовательский PDFView, который загружает PDF-файлы из облака и локально, если доступно.Для локальных экземпляров, как и ожидалось, все загружается быстро, но когда URL-адрес не является локальным, т. Е. С сервера, это может занять некоторое время, я хотел бы добавить UIActivityIndicator, пока PDFView загружает файл, есть ли способ узнатьделегат или уведомление для прослушивания, чтобы отслеживать это?

Моя реализация в основном похожа на приведенную ниже:

let url = ReportsRepository.shared.getReportUrl(id: "1234")

self.pdfView.document = PDFDocument(url: url)

После этого, если URL-адрес от сервера, приложение кажетсязаморозить, поэтому мне нужно добавить UIActivityIndicator здесь, проблема в том, как мне остановить его с помощью PDFKit?

1 Ответ

0 голосов
/ 25 мая 2018

Другой способ загрузить PDFDocument - передать необработанные данные.

Если бы это была моя проблема, я бы загружал данные асинхронно с помощью метода, подобного этому:

func loadAndDisplayPDF() {

    // file on the local file system
    let requestURL = URL(fileURLWithPath: "/tmp/MyResume.pdf")! 

    // remote pdf
    //let requestURL = URL(string: "http://www-personal.umich.edu/~myke/MichaelDautermannResume.pdf")!
    let urlRequest = URLRequest(url: requestURL)
    let session = URLSession.shared

    if requestURL.isFileURL == false {
        print("this is a good place to bring up a UIActivityIndicator")
    }
    let task = session.dataTask(with: urlRequest) {
        (data, response, error) -> Void in

        if let actualError = error
        {
            print("loading from \(requestURL.absoluteString) - some kind of error \(actualError.localizedDescription)")
        }

        if let httpResponse = response as? HTTPURLResponse
        {
            let statusCode = httpResponse.statusCode

            if (statusCode == 200) {
                print("file downloaded successfully.")
            } else  {
                print("Failed")
            }
        }

        if let actualData = data {
            print("data length is \(actualData.count)")
            self.pdfView = PDFView(frame: CGRect(x: 10, y: 10, width: 200, height: 200))
            if let actualPDFView = self.pdfView {
                actualPDFView.document = PDFDocument(data: actualData)
                self.view = actualPDFView
            }
        }
        print("all done")
    }
    task.resume()
}

Вы можете либо сразу отобразить UIActivityIndicator (когда вы обнаружите его удаленным), либо установить таймер на срабатывание через 1/2 - 1 секунду, сделать недействительными и / или удалить оба этих файла, когда файл PDF собирается отобразиться.

...