我有一个简单的测试应用程序,其自定义视图(在Interface Builder中设置)的原点为(20,20)。当我在视图的最左下角获得鼠标事件时,事件的位置报告为(20,21),转换点报告为(0,1)。我正在使用小精灵来确保我在左下角点击右边。 (如果我向下移动一个像素,我什么也得不到,表明我在视线之外。)
这是mouseDown代码:
- (void)mouseDown:(NSEvent *)e
{
NSPoint pt = [e locationInWindow];
NSLog(@"Location in Window: %.0f, %.0f", pt.x, pt.y);
pt = [self convertPoint:pt fromView:nil];
NSLog(@"Converted Point: %.0f, %.0f", pt.x, pt.y);
}
任何人都可以解释为什么y位置似乎被一个人关闭了吗?
答案 0 :(得分:3)
这是正确的行为。来自Cocoa Drawing Guide:
重要事项: Cocoa事件对象返回的y坐标值 基于1而不是基于0。因此,一个 鼠标点击左下角 一个窗口或视图会产生 Cocoa中的点(0,1)而不是(0,0)。 只有y坐标是从1开始的。
答案 1 :(得分:0)
Fencepost error?在您的代码,库或您对库的使用?在进行浮点数据的整数像素报告时舍入错误?