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

bee*_*eeb 1 cocoa mp3 quicklook swift

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

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

我见过一个 FTP 客户端,它可以对 Finder 可以预览的任何文件进行快速查看预览,因此我猜测可以在应用程序中使用它,特别是在本机支持文件格式的情况下。

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

Ste*_*ntz 5

事实证明这实际上非常简单。所有 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")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这分为三个部分。

首先,要打开标准“快速查看”窗口,只需调用makeKeyAndOrderFront共享面板即可。

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

对于我的演示,我只是将NSURL实例返回到系统默认包含的两个资源。事实证明NSURL已经实现了该QLPreviewItem协议,因此无需执行任何额外操作。

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

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

  • @beeb,是的,这是问题,因为提供的答案不正确。您需要在“beginPreviewPanelControl”方法中设置“delegate”和“datasource”。看看:http://stackoverflow.com/a/4528892/4532985 (3认同)