检测按钮何时被按下然后向上 Swift macOS

detect when button is pressed down and then up Swift macOS

我正在编写一个向机顶盒发送命令的应用程序。 该盒子可以接收两种类型的命令:推和释放。

我可以在 swift 的 macO 上按下按钮。 @IBAction func btnPressed(sender: NSButton) { } 我在其中发送命令和释放。对于任何命令,如更改频道、静音或其他,一切正常。 相反,对于音量调高或完成,我需要按照我的操作,点击几次以调高或调低音量。

我让鼠标向上和向下工作,检测点击发生的位置(在对应于向上和向下图像的 NSImageView(如果不是按钮)内)以模拟长按音量增大或减小,但我可以'在按下按钮的方法中获取它。

在'buttonpressed'方法中有没有办法结合鼠标事件来模拟按住鼠标的同时长按?

PS:我也在这里用谷歌搜索,但没有找到提示。

如果有帮助:

1 subclass 按钮 class 触发 mouseDown 和 mouseUp 的动作(该动作将被触发两次)

 class myButton: NSButton {
     override func awakeFromNib() {
     super.awakeFromNib()
    let maskUp = NSEvent.EventTypeMask.leftMouseUp.rawValue
    let maskDown = NSEvent.EventTypeMask.leftMouseDown.rawValue
    let mask = Int( maskUp | maskDown ) // cast from UInt
    //shortest way for the above:
    //let mask = NSEvent.EventTypeMask(arrayLiteral: [.leftMouseUp, .leftMouseDown]).rawValue
    self.sendAction(on: NSEvent.EventTypeMask(rawValue: NSEvent.EventTypeMask.RawValue(mask)))
    //objC gives: [self.button sendActionOn: NSLeftMouseDownMask | NSLeftMouseUpMask];
}

}

2:在故事板中,将 NSButton 的 class 更改为您的 class:

3:将动作的发送者设置为您的子class并检查当前事件类型:

@IBAction func volUpPressed(sender: myButton) {
    let currEvent = NSApp.currentEvent
    
    if(currEvent?.type == .leftMouseDown) {
        print("volume Up pressed Down")
        //... do your stuff here on mouseDown
    }
    else
    if(currEvent?.type == .leftMouseUp) {
        print("volume Up pressed Up")
        //... do your stuff here on mouseUp
    }
}