获取mouseDragged事件的开始和结束坐标

时间:2014-05-08 23:15:59

标签: objective-c

我正在创建一个应用程序来跟踪按下哪些键以及用户在屏幕上单击的位置,以及它们拖动鼠标的时间和位置。我已经实现了前两个,但我不确定如何继续获取单个鼠标拖动的起始坐标和结束坐标。

这是我到目前为止所做的:

dragWatcher = [NSEvent addGlobalMonitorForEventsMatchingMask:NSLeftMouseDraggedMask handler:^(NSEvent *event) {
      NSLog(@"----------------------\n");
      NSLog(@"dX: %.2lf dY:%.2lf", [event deltaX], [event deltaY]);
      NSLog(@"----------------------\n");
}];

为什么当我拖动窗口(不停止)时,会有多个日志行?我本以为,只要我不释放鼠标按钮,就应该算作同样的动作。 TIA!

编辑:NSLog的样本...

2014-05-08 16:12:11.821 Recorder[17504:303] dX: 1.00 dY:0.00
2014-05-08 16:12:11.822 Recorder[17504:303] ----------------------
2014-05-08 16:12:11.838 Recorder[17504:303] ----------------------
2014-05-08 16:12:11.838 Recorder[17504:303] dX: 6.00 dY:-4.00
2014-05-08 16:12:11.838 Recorder[17504:303] ----------------------
2014-05-08 16:12:11.854 Recorder[17504:303] ----------------------
2014-05-08 16:12:11.854 Recorder[17504:303] dX: 3.00 dY:-4.00
2014-05-08 16:12:11.854 Recorder[17504:303] ----------------------
2014-05-08 16:12:11.871 Recorder[17504:303] ----------------------
2014-05-08 16:12:11.871 Recorder[17504:303] dX: 21.00 dY:-15.00
2014-05-08 16:12:11.871 Recorder[17504:303] ----------------------

1 个答案:

答案 0 :(得分:1)

你误解了NSLeftMouseDragged事件是什么。它与NSMouseMoved事件完全类似,只是按住左/主鼠标按钮。它不表示从鼠标按下直到鼠标按下拖动的总体。

应用程序需要在拖动过程中获得鼠标位置的持续更新,以便他们能够做出响应。例如,当您单击按钮时,它会在光标位于内部时突出显示。如果将光标移出按钮,它将不亮。如果将其移回,则会再次突出显示。根据您对NSLeftMouseDragged的解释,在释放按钮并拖动结束之前,应用程序不会收到其他事件。