检测按钮何时被按下然后向上 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
}
}
我正在编写一个向机顶盒发送命令的应用程序。 该盒子可以接收两种类型的命令:推和释放。
我可以在 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
}
}