Macos 正确的方法是什么来计算鼠标被点击的角度
我的应用程序中有一个自定义的NSView子类。 我想知道视图中的确切点,相对于它的原点,那是用鼠标点击的。(即,不是相对于窗原点,而是相对于自定义视图原点) 我一直在使用这个,它非常有效:Macos 正确的方法是什么来计算鼠标被点击的角度,macos,nsview,nspoint,Macos,Nsview,Nspoint,我的应用程序中有一个自定义的NSView子类。 我想知道视图中的确切点,相对于它的原点,那是用鼠标点击的。(即,不是相对于窗原点,而是相对于自定义视图原点) 我一直在使用这个,它非常有效: -(void)mouseDown:(NSEvent *)theEvent { NSPoint screenPoint = [NSEvent mouseLocation]; NSPoint windowPoint = [[self window] convertScreenToBase:scre
-(void)mouseDown:(NSEvent *)theEvent
{
NSPoint screenPoint = [NSEvent mouseLocation];
NSPoint windowPoint = [[self window] convertScreenToBase:screenPoint];
NSPoint point = [self convertPoint:windowPoint fromView:nil];
_pointInView = point;
[self setNeedsDisplay:YES];
}
但现在我得到一个警告,convertScreenToBase已被弃用,请改用convertRectFromScreen。然而,我不能从convertRectFromScreen得到相同的结果,而且无论如何,我感兴趣的是一个点,而不是一个rect
我应该用什么来正确替换上面不推荐使用的代码?
提前谢谢 我制作了一个带有窗口的示例项目,并测试了“旧”和“新”场景。两种情况下的结果是相同的 您还需要做一个额外的步骤:创建一个以screenPoint为原点的简单rect。然后使用新返回的rect的原点 以下是新代码:
-(void)mouseDown:(NSEvent *)theEvent
{
NSPoint screenPoint = [NSEvent mouseLocation];
NSRect rect = [[self window] convertRectFromScreen:NSMakeRect(screenPoint.x, screenPoint.y, 0, 0)];
NSPoint windowPoint = rect.origin;
NSPoint point = [self convertPoint:windowPoint fromView:nil];
_pointInView = point;
[self setNeedsDisplay:YES];
}
我希望我能帮助你 代码中的这一行:
NSPoint screenPoint = [NSEvent mouseLocation];
获取与事件流不同步的鼠标光标位置。这不是你目前正在处理的事件的位置,这在过去是很短的时间;这是光标现在的位置,这意味着你可能跳过了一些重要的东西。您几乎应该始终使用与事件流同步的位置
为此,请使用方法接收的theEvent
参数NSEvent
有一个locationInWindow
属性,该属性已转换为接收它的窗口的坐标。这样就无需对其进行转换
NSPoint windowPoint = [theEvent locationInWindow];
将窗口位置转换为视图坐标系的代码很好。我找到了解决方案:
NSPoint screenPoint = [NSEvent mouseLocation];
NSRect screenRect = CGRectMake(screenPoint.x, screenPoint.y, 1.0, 1.0);
NSRect baseRect = [self.window convertRectFromScreen:screenRect];
_pointInView = [self convertPoint:baseRect.origin fromView:nil];
嗯,你的代码和我的代码给出了完全不同的结果!另外,[rect origin]应该是rect.origin,因为NSRect不是一个类。你使用rect.origin是对的,这是我的错。。我再看看!风景在哪里?它可能在翻转的坐标系中谢谢!视图位于父窗口底部上方一段距离处,左侧一段距离处。它因自动布局和约束而变化。它没有翻转。(原点=左下角)与Max的答案唯一的实际区别似乎是使用1.0而不是0表示矩形大小。