在Swift中捕获系统卷更改

时间:2016-08-05 14:04:45

标签: swift macos events volume

阅读以下有关在osX中获取和设置系统卷的建议,我使用的ISSoundAdditions非常有用:

Change Volume on Mac programmatically

Set OS X volume in OS X 10.11 using Swift without using the deprecated AudioHardwareServiceSetPropertyData API

我可以使用NSSlider(带绑定)直接管理系统音量。 我的问题是:如何捕获作为事件更改的音量(例如键盘中音量调高键的情况?在这种情况下,我的滑块没有反应。 我试验过:

self.addObserver(self, forKeyPath: "volume.systemVolume", options: NSKeyValueObservingOptions.New, context: &volumeContext)

但后来我得到了一个例外:

  

无法为观察者XX更新关键路径" volume.systemVolume",   最有可能的原因是因为关键字"音量"没有改变   正在发送适当的KVO通知。检查KVO合规性   该课程。

BTW,systemVolume属性是一个类属性,如果重要吗?

非常感谢你的帮助

约书亚

1 个答案:

答案 0 :(得分:0)

我用过(迅捷4):

DistributedNotificationCenter.default.addObserver(self,
                                           selector: #selector(eventFunction(_:)),
                                           name: NSNotification.Name(rawValue: "com.apple.sound.settingsChangedNotification"),
                                           object: nil)

函数定义如下:

@objc func volumeChangeEvent(_ evt: NSEvent) { }