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

2024-01-06

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

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

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

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


事实证明这实际上非常简单。所有 API 都是公开的。我确实认为事情变得更简单操作系统 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")
        }
    }
}

这分为三个部分。

一、开放标准快速查看窗口只是调用makeKeyAndOrderFront在共享面板上。

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • supportedInterfaceOrientations 方法不会重写其超类中的任何方法

    在 UIViewController 中 这段代码 public override func supportedInterfaceOrientations gt UIInterfaceOrientationMask if let mainC
  • Swift 中计算只读属性与函数

    在 Swift WWDC 简介会话中 只读属性description被证明 class Vehicle var numberOfWheels 0 var description String return numberOfWheels wh
  • Swift PageControl 当前页面上更大的点

    我试图将当前页面的点缩放为大于未 选择 的点 我正在使用滚动视图委托来确定哪个页面是当前的 目前 点的大小没有变化 我将如何实现这一目标 func scrollViewDidEndDecelerating scrollView UIScro
  • Swift - 保存在 TableView 中选择的复选标记

    我对 Swift 相当陌生 并且在 TableView 多重选择方面遇到问题 我有多个选择 可以用复选标记进行检查 类似于待办事项列表 当我检查项目时 我希望能够返回 ListView 并保存我的选择 我假设将其保持在已保存状态的代码将位于
  • 如何在 SwiftUI 中延迟动画?

    我想为两个文本字段设置动画 第二个字段有延迟 但它不起作用 没有延迟 它们同时从位置 100 动画到 0 这是代码 State private var offset CGFloat 100 State private var offset2
  • 在 Swift UI 中为文本添加动画

    怎么可能动画化Text or TextField来自 Swiftui 的意见 我所说的动画是指 当文本发生变化时 它会 计数 例如 给定一些标签 如何创建一个动画 当我将标签文本设置为 100 时 它会从 0 上升到 100 我知道这在 U
  • UITextfield 键盘只有字母,没有数字,没有大写字母,没有空格键?

    我希望 UITextfield 的键盘只有 a z 没有数字 没有特殊字符 并且没有大写字母 基本上我想要一个只有字母的键盘 我已经能够禁用该空间了 有人知道如何禁用数字 特殊字符和大写字母吗 解决这些问题中的任何一个都很棒 对所有角色执行
  • didRegisterForRemoteNotificationsWithDeviceToken 停止被调用 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在测试我的应用程序是否使用 Push Notifs 一整天都好好的 突然就不行了 设置完全没有变化 经过更多调试后 我发现该函
  • SwiftUI 导航:如何将详细信息视图切换到不同的项目?

    我正在努力实现以下导航行为 用户可以从列表中选择一个项目 该项目会触发该项目的详细信息视图 在此详细视图上 导航栏中有一个 添加 按钮 可打开用于添加其他项目的模式表 到目前为止 一切都按预期进行 但添加项目后 我希望详细视图显示新项目 我
  • 如何在 Swift 中退出“DispatchQueue.main.asyncAfter”

    我想在调用 deinit 时退出 DispatchQueue main asyncAfter 子视图 swift DispatchQueue main asyncAfter deadline now 5 0 self doSomething
  • 重新定位时 Mapbox 默认的 compassView 会给出奇怪的结果

    我遇到一种情况 必须将地图框罗盘视图重新定位到不同的位置 当我以其他点作为其 compassView 轴旋转地图时 compassView 现在正在旋转 并给了我一个奇怪的结果 附截图 黑色mapBox默认罗盘图标是旋转的 参考截图 这是
  • Swift 3 GCD API 更改后的dispatch_once

    新语法是什么dispatch once在语言版本 3 中进行更改后的 Swift 中 旧版本如下 var token dispatch once t 0 func test dispatch once token These 对 libdi
  • 如何在 Cocoa with Core Data 中上传和存储文件?

    我有一个应用程序 我希望能够将文件上传到其中 我可以想象序列化数据 将其放入数组中 然后序列化数组并将其放入核心数据中 但这似乎不太正确 我还可以想象将文件复制到应用程序的支持文件中 获取这些文件的 NSURL 并存储数组或 NSURL 无
  • 快速从 appDelegate 中 popToRootViewController

    我试图从应用程序委托弹出到导航堆栈的根视图控制器 并且在将 obj c 中的内容转换为 swift 时遇到一些问题 obj c 中的工作原理 UINavigationController navigationController UINav
  • 如何对 iPad 应用程序进行类转储?

    我正在尝试运行 iPad 应用程序的类转储来探索其架构 我使用 The Unarchiver 提取了 ipa 文件 并从 Payload 文件夹中对 app 文件运行了 class dump 但是 我收到此错误 Generated by c
  • CloudKit 获取当前用户的所有订阅

    我设法在 Apple CloudKit 中保存 更改和删除记录 我什至收到了与订阅相关的通知 但我不知道如何列出当前用户的所有订阅 到目前为止 这是我的代码 let operation CKFetchSubscriptionsOperati
  • Swift:如何在 println 之后刷新标准输出?

    如何在 Swift 中刷新标准输出println命令 也就是说 Swift 相当于什么fflush stdout in C 您可以使用 fflush stdout 导入 libc 后 if os Linux import Glibc els
  • CNContact 添加新的联系人问题

    我在通过以下方式添加联系人时遇到问题联系框架 我使用的是装有 iOS 12 1 2 的 iPhone 5s 设备 我添加联系人的代码如下 let saveRequest CNSaveRequest saveRequest add self
  • Swift 中的弹出视图

    我有一个弹出视图 没有选项卡栏 它弹出到带有选项卡栏的视图控制器 在带有选项卡栏的视图控制器中 我设置了一个单击按钮 以便弹出视图控制器 IBAction func PopUpClicked sender UIButton gt Void
  • 如何在 Swift 中使用 substringToIndex? [复制]

    这个问题在这里已经有答案了 我在这一行收到编译器错误 UIDevice currentDevice identifierForVendor UUIDString substringToIndex 8 类型 String Index 不符合协

随机推荐