我试图能够检测到何时按住鼠标而不是单击鼠标。这就是我所拥有的,但我希望能够检测到被按住的鼠标,而不是点击次数。
-(void)mouseDown:(NSEvent *)event;
{
//instead of clickCount I want my if statement to be
// if the mouse is being held down.
if ([event clickCount] < 1)
{
}
else if ([event clickCount] > 1)
{
}
}
答案 0 :(得分:9)
从OS X 10.6开始,您可以随时随地使用NSEvent
的{{1}}方法:
pressedMouseButtons
该方法返回当前向下的鼠标按钮的索引作为掩码。 NSUInteger mouseButtonMask = [NSEvent pressedMouseButtons];
BOOL leftMouseButtonDown = (mouseButtonMask & (1 << 0)) != 0;
BOOL rightMouseButtonDown = (mouseButtonMask & (1 << 1)) != 0;
对应于鼠标左键,1 << 0
对应鼠标右键,1 << 1
,n&gt; = 2对应其他鼠标按钮。
有了这个,就没有必要抓住1 << n
,mouseDown:
或mouseDragged:
事件。
答案 1 :(得分:4)
据推测,您想要检测鼠标是否被按下一段时间。这非常简单;它只需要一个计时器。
在mouseDown:
中,您启动一个计时器,该计时器将在您选择的时间段后启动。您需要将其粘贴到ivar中,因为您还会在mouseUp:
- (void)mouseDown: (NSEvent *)theEvent {
mouseTimer = [NSTimer scheduledTimerWithTimeInterval:mouseHeldDelay
target:self
selector:@selector(mouseWasHeld:)
userInfo:theEvent
repeats:NO];
}
在mouseUp:
中,销毁计时器:
- (void)mouseUp: (NSEvent *)theEvent {
[mouseTimer invalidate];
mouseTimer = nil;
}
如果计时器触发,那么您知道鼠标按钮已按下指定的时间段,您可以采取任何您喜欢的操作:
- (void)mouseWasHeld: (NSTimer *)tim {
NSEvent * mouseDownEvent = [tim userInfo];
mouseTimer = nil;
// etc.
}
答案 2 :(得分:0)
据我记得,mouseDown只在用户第一次点击元素时触发,而不是在按下时触发。
您的问题的解决方案是在.h中定义一个BOOL,如下所示:
bool mouseIsHeldDown = false;
然后在你的mouseDown中:
mouseIsHeldDown = true;
在你的mouseUP中:
mouseIsHeldDown = false;
然后,您可以在代码中的任何位置检查mouseIsHeldDown = true。
希望这可以解决您的问题!