我想了解如何在iOS和macOS上使用SwiftUI与QuickLook进行交互。我猜测在不久的将来,可能会有一些统一的SwiftUI QL API,但目前还没有看到,所以让我们先使用现有的东西...
我该如何从我的SwiftUI视图中呈现和配置QLPreviewPanel?到目前为止,我有以下代码:
struct ItemView: View {
let previewPanelThing = PreviewPanelThing()
var body: some View {
Button("OSX preview") {
print("osx preview")
if let previewPanel = QLPreviewPanel.shared() {
self.previewPanelThing.updateControllerForPanel(previewPanel)
previewPanel.makeKeyAndOrderFront(self.previewPanelThing)
}
}
}
}
class PreviewPanelThing: QLPreviewPanelDataSource {
func updateControllerForPanel(_ panel: QLPreviewPanel) {
print("updating controller")
panel.updateController()
}
func numberOfPreviewItems(in panel: QLPreviewPanel!) -> Int {
print("number of items")
return 1
}
func previewPanel(_ panel: QLPreviewPanel!, previewItemAt index: Int) -> QLPreviewItem! {
print("requesting preview item")
let fileURL: URL = Bundle.main.url(forResource: "Thinking-of-getting-a-cat", withExtension: "png")!
return fileURL as QLPreviewItem
}
}
这不起作用。我怀疑是因为QLPreviewPanel文档说:预览面板遵循响应者链并适应第一个愿意控制它的响应者。
我的previewPanelThing
实例不在UI和响应者链中。我不确定在SwiftUI中响应者链是如何工作的,以及最好的解决方法是什么。
.quickLookPreview()
修饰符,在iOS上运行良好,但在macOS上无法正确关闭,并且会出现以下警告,例如“-[QLPreviewPanel reloadData] called while the panel has no controller - Fix this or this will raise soon. See comments in QLPreviewPanel.h for”。我猜目前还没有人解决这个问题?我猜这是苹果的问题。 - undefined