如何修复:QuickLook 显示黑屏而不是所需图片
How to fix: QuickLook shows black screen instead of the desired picture
我正在设置一个集中接收 URL 和 document/file(https://something.com/model.obj f.e)和 "Model Name" 的名称的应用程序。收到后,我使用 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)
}
}
}
快速查看视图控制器
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
}
}
我希望显示图像/文件,但显示的是黑色图像。
问题是您的 QuickLookViewController 从未实际呈现快速查看。您有一个 QLPreviewController,但它只是放在那里,未使用。
由于 QLPreviewController 本身就是一个视图控制器,我建议删除 QuickLookViewController 并只显示第一个视图控制器中的 QLPreviewController。
我正在设置一个集中接收 URL 和 document/file(https://something.com/model.obj f.e)和 "Model Name" 的名称的应用程序。收到后,我使用 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)
}
}
}
快速查看视图控制器
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
}
}
我希望显示图像/文件,但显示的是黑色图像。
问题是您的 QuickLookViewController 从未实际呈现快速查看。您有一个 QLPreviewController,但它只是放在那里,未使用。
由于 QLPreviewController 本身就是一个视图控制器,我建议删除 QuickLookViewController 并只显示第一个视图控制器中的 QLPreviewController。