Mik*_*012 17 macos cocoa double-click nsresponder
NSResponder似乎没有鼠标双击事件.是否有一种简单的方法来捕获双击?
简单clickCount解决方案的问题是双击被简单地视为两次单击.我的意思是你仍然可以点击一下.如果你想对单击做出不同的反应,你需要点击计数之外的东西.这是我最终得到的(在Swift中):
private var _doubleClickTimer: NSTimer?
// a way to ignore first click when listening for double click
override func mouseDown(theEvent: NSEvent) {
if theEvent.clickCount > 1 {
_doubleClickTimer!.invalidate()
onDoubleClick(theEvent)
} else if theEvent.clickCount == 1 { // can be 0 - if delay was big between down and up
_doubleClickTimer = NSTimer.scheduledTimerWithTimeInterval(
0.3, // NSEvent.doubleClickInterval() - too long
target: self,
selector: "onDoubleClickTimeout:",
userInfo: theEvent,
repeats: false
)
}
}
func onDoubleClickTimeout(timer: NSTimer) {
onClick(timer.userInfo as! NSEvent)
}
func onClick(theEvent: NSEvent) {
println("single")
}
func onDoubleClick(theEvent: NSEvent) {
println("double")
}
Run Code Online (Sandbox Code Playgroud)
小智 6
通常应用程序会查看clickCount == 2 on - [mouseUp:]以确定双击.
一个改进是跟踪鼠标点击位置 - [mouseDown:],并看到鼠标向上位置的增量很小(x和y都是5点或更小).
为NSEvents生成mouseDown:并mouseUp:拥有一个名为的属性clickCount.检查是否是两个以确定是否发生了双击.
示例实施:
- (void)mouseDown:(NSEvent *)event {
if (event.clickCount == 2) {
NSLog(@"Double click!");
}
}
Run Code Online (Sandbox Code Playgroud)
只需将其放在您的NSResponder(例如NSView)子类中.
| 归档时间: |
|
| 查看次数: |
8136 次 |
| 最近记录: |