翻转NSView鼠标坐标

cdy*_*yer 4 macos cocoa

我有一个NSView的子类,它重新实现了许多鼠标事件功能.例如在mouseDown中从NSEvent获取点我使用:

NSEvent *theEvent; // <- argument to function

NSPoint p = [theEvent locationInWindow];
p = [self convertPoint:p fromView:nil];
Run Code Online (Sandbox Code Playgroud)

但是坐标似乎被翻转,(0,0)位于窗口的左下角?

编辑:我已经重写了isFlipped方法以返回TRUE,但它只影响了绘图.对不起,简直不敢相信我忘了把它直接放了.

Rob*_*ier 6

翻转是什么意思?Mac使用LLO(左下角)坐标系统来处理所有事情.

编辑我无法通过一个简单的项目重现这一点.我创建了一个这样的NSView实现:

@implementation FlipView
- (BOOL)isFlipped {
  return YES;
}

- (void)mouseDown:(NSEvent *)theEvent {
  NSPoint p = [theEvent locationInWindow];
  p = [self convertPoint:p fromView:nil];
  NSLog(@"%@", NSStringFromPoint(p));
}
@end
Run Code Online (Sandbox Code Playgroud)

我收到了我期望的坐标.isFlipped按预期移除切换方向.你有一个简单的项目来证明你的问题吗?

  • 在我的测试中,如果你使用convertPoint:**fromView:**,`isFlipped {YES}`*会*将点转换为左上角的原点.但是*不*如果你使用convertPoint:**toView:** - 这是预期的,因为`toView:`假设该点已经在`self`视图的坐标系中. (2认同)