Как исправить: QuickLook показывает черный экран вместо желаемой картинки - PullRequest
0 голосов
/ 21 мая 2019

Я настраиваю приложение, которое централизованно получает URL-адрес и имя документа / файла (https://something.com/model.obj f.e) и «Название модели». Как только оно получено, я загружаю его с помощью Alamofire, а затем отправляю его в нужный ViewController. Однако после загрузки файл отображаться не будет.

Я пытался переместить логику загрузки за пределы представления, я пытался добавить представление как дочерний элемент, но проблема сохраняется.

Контроллер исходного вида

func prepareQuickLookSegue(_ url: URL,_ name: String,_ viewController: UIViewController) {
        SVProgressHUD.show()
        let destination: DownloadRequest.DownloadFileDestination = { _, _ in
            var documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
            documentsURL.appendPathComponent(url.lastPathComponent)
            return (documentsURL, [.removePreviousFile])
        }

        Alamofire.download(url, to: destination).responseData { response in
            if let destinationUrl = response.destinationURL {
                SVProgressHUD.dismiss()
                let vc = QuickLookViewController(url: destinationUrl, name: name)
                viewController.navigationController?.pushViewController(vc, animated: true)
            }
        }
    }

Контроллер Quick Look View

import UIKit
import QuickLook

class QuickLookViewController: UIViewController, QLPreviewControllerDataSource, QLPreviewControllerDelegate {

    let quickLookController = QLPreviewController()
    var name:String?
    var fileURL:NSURL?

    init(url:URL,name:String){
        self.fileURL = url as NSURL
        self.name = name
        super.init(nibName: nil, bundle: nil)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        quickLookController.dataSource = self
        quickLookController.delegate = self
        navigationItem.title = self.name
    }

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

    func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
        return fileURL!
    }

    func previewController(controller: QLPreviewController, shouldOpenURL url: NSURL, forPreviewItem item: QLPreviewItem) -> Bool {
        if item as? NSURL == fileURL {
            return true
        } else {
            print("Will not open URL \(String(describing: url.absoluteString))")
        }
        return false
    }
}

Я ожидаю, что будет показано изображение / файл, но показано черное изображение.

1 Ответ

0 голосов
/ 21 мая 2019

Проблема в том, что ваш QuickLookViewController никогда не представляет быстрый взгляд. У вас есть QLPreviewController, но он просто не используется.

Поскольку QLPreviewController сам по себе является контроллером представления, я бы предложил исключить QuickLookViewController и просто показать QLPreviewController из первого контроллера представления.

...