我知道标题选择不好,但我不知道如何更好地描述它......
我有一个NSView实例,我将其添加到右侧屏幕边缘的窗口中:
CGRect zoneFrame = CGRectMake(screenFrame.size.width - 50, 0, 50, screenFrame.size.height);
当用户到达屏幕边缘时,我想捕获鼠标。然后,我使用此方法将位置发送到自定义委托协议:
- (void)mouseMoved:(NSEvent *)mouseEvent {
[_delegate mouseMovedTo:[mouseEvent locationInWindow]];
}
当用户继续将其拖动到右侧时,我现在想继续捕捉真正的鼠标移动。但是,正如预期的那样,当指针超出视图绑定时,NSView不会收到移动操作。屏幕的边缘。
我想创建一些你可以想到放在屏幕旁边的想象视图的东西。
是否有可能继续捕获鼠标?然后让鼠标移动到视图之外,只有在它一直移动到“虚构”视图的左边缘之后?
答案 0 :(得分:0)
如果要在鼠标停止时跟踪鼠标,则必须手动跟踪事件。这是一个模板代码。
- (void)trackMouseWithEvent:(NSEvent *)theEvent {
NSPoint curPoint = [self convertPoint: [theEvent locationInWindow] fromView: nil];
while (1) {
NSEvent *theEvent = [[self window] nextEventMatchingMask: (NSLeftMouseDraggedMask | NSLeftMouseUpMask)];
NSPoint newPoint = [self convertPoint: [theEvent locationInWindow] fromView: nil];
// Drag distance is curPoint - newPoint
if ([theEvent type] == NSLeftMouseUp)
break;
}
}
如果您希望框架在未拖动时发送鼠标移动事件,则必须明确设置视图以接收鼠标移动事件。由于调度每次鼠标移动都是一项昂贵的操作,如果您没有明确要求接收鼠标移动事件,则只会输入鼠标输入和鼠标移出事件。