在Swift cocoa应用程序中使用Quick Look预览音频文件



我的应用程序在NSTableView中列出音频文件(MP3),每一行的对象包含音频文件的路径。我希望能够预览音频文件与快速查看(如在Finder中)时,点击空格键,而一行被选中。

通过查看相关的问题和答案,我注意到这个API似乎是私有的,所以很难找到关于它的最新可靠的信息或文档,更不用说在Swift中了。更重要的是,我找到的大多数例子都与图像预览有关,有些例子实际上提到了Xcode的"调试快速查看",这根本不是我感兴趣的。

我见过一个FTP客户端,它可以快速查看Finder可以预览的任何文件,所以我猜可以在应用程序中使用它,特别是如果文件格式是本地支持的。

谁能给我指个正确的方向?

这实际上是非常简单的。所有api都是公共的。我确实认为OS X 10.10的事情变得更简单了,只是没有很好的文档可能?

下面是一个ViewController的例子,它有一个按钮来触发标准的快速查看面板,其中有两个项目可以在文件系统中找到。

class ViewController: NSViewController {
    @IBAction func showQuickLookPanel(sender: AnyObject) {
        if let panel = QLPreviewPanel.sharedPreviewPanel() {
            panel.dataSource = self
            panel.makeKeyAndOrderFront(self)
        }
    }
}
extension ViewController: QLPreviewPanelDataSource {
    func numberOfPreviewItemsInPreviewPanel(panel: QLPreviewPanel!) -> Int {
        return 2
    }
    func previewPanel(panel: QLPreviewPanel!, previewItemAtIndex index: Int) -> QLPreviewItem! {
        if index == 0 {
            return NSURL(fileURLWithPath: "/Library/Desktop Pictures/Beach.jpg")
        } else {
            return NSURL(fileURLWithPath: "/System/Library/Compositions/Rollercoaster.mov")
        }
    }
}

这有三个部分。

首先,要打开标准的Quick Look窗口,只需调用共享面板上的makeKeyAndOrderFront

面板知道要显示什么,因为它与通过QLPreviewPanelDataSource实现的数据源对话。正如您在我的示例中看到的那样,它只是返回2的计数,并且可以要求它返回实现QLPreviewItem的对象。

对于我的演示,我只是将NSURL实例返回到默认情况下包含在系统中的两个资源。原来NSURL已经实现了QLPreviewItem协议,所以没有什么额外的事情要做。

如果您想要预览的项目不容易转换为文件系统上的url(文件),那么您将需要做一个更复杂的QLPreviewItem对象实现。

我敢打赌指向MP3文件会很好。

最新更新