在 Swift cocoa 应用程序中使用快速查看来预览音频文件

Use Quick Look inside a Swift cocoa application to preview audio files

我的应用程序在 NSTableView 中列出了音频文件 (MP3),每行的对象都包含音频文件的路径。我希望能够在选中一行的情况下点击 space 栏时使用“快速查看”(如在 Finder 中)预览音频文件。

通过查看相关问题和答案,我注意到 API 似乎是私有的,因此很难找到关于此的最新可靠信息或文档,更不用说 Swift.更何况,我发现的大多数例子都与图像预览有关,有些实际上提到了Xcode的"debug quick look",这根本不是我感兴趣的

我看到一个 FTP 客户端可以对 Finder 可以预览的任何文件进行 Quick Look 预览,所以我猜想可以在一个人的应用程序中使用它,特别是如果文件格式是原生支持。

有人能指出我正确的方向吗?

这其实很简单。所有 API 都是 public。我确实认为 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 window 只需在共享面板上调用 makeKeyAndOrderFront

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

的对象

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

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

我打赌指向 MP3 文件就可以正常工作。