自定义视图中的mouseDown事件未显示单击的正确坐标

时间:2011-12-13 11:40:59

标签: objective-c cocoa nsview

我有一个自定义视图类,它接收鼠标事件。我没有得到mouseDown或mouseUp事件的正确坐标。无论我在视图中单击哪里,我都会得到相同的错误坐标。

这是我在自定义NSView类中的函数

- (void)mouseDown:(NSEvent *)theEvent
{
    NSPoint coordinateInBaseWindow = theEvent.locationInWindow;

    NSPoint coordinateInView = [self convertPoint:coordinateInBaseWindow fromView:nil];
    NSLog(@"left mouse down (x,y) =(%f,%f)", coordinateInView.x, coordinateInView.y);
}

我有mouseUp事件的类似处理程序。

现在输出始终是

  

鼠标左键(x,y)=(0.000000,-1.996910)

     

鼠标左键(x,y)=(0.000000,0.000000)

无论我在视图内部单击,左下方的坐标始终为(0.000000,-1.996910),鼠标左键始终为(0.000000,0.000000)。

  1. 我做错了什么?为什么我无法获得鼠标单击事件的正确坐标?
  2. mouseDown和mouseUp一起点击一下。 mouseDown和mouseUp的坐标不应该相等吗?为什么他们在这种情况下有所不同?
  3. 修改1:

    正如omz指出的那样,我应该使用convertPoint:fromView:,但这也没有解决问题。我仍然得到相同的坐标。

    编辑2: 我在NSLog中的格式说明符不正确,这给了我完全错误的结果。

1 个答案:

答案 0 :(得分:4)

要从窗口坐标转换,您必须使用convertPoint:fromView:nil作为视图参数。你的转换恰恰相反。