2010-07-14 76 views
1

我有一個自定義視圖(在界面生成器中設置)的簡單測試應用程序,它的原點位於(20,20)。當我在視圖的最左下角得到一個鼠標事件時,事件的位置被報告爲(20,21)並且轉換的點在(0,1)。我使用小精靈來確保我點擊左下角的右側。 (如果我移動一個像素下來,我什麼也沒得到,說明我的觀點之外。)鼠標事件的位置似乎不正確

下面是鼠標按下代碼:

- (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位置出現一個地關閉?

回答

2

這是正確的行爲。從Cocoa Drawing Guide

重要:可可事件對象返回y座標是從1開始的,而不是基於0 值。因此,一個窗口或視圖的左下角 上的 鼠標單擊將在Cocoa中產生 點(0,1)而不是(0,0)。 只有y座標是從1開始的。

+0

謝謝!我很想知道爲什麼這樣做,但至少這是故意的,記錄在案的行爲。 – Scott 2010-07-14 21:58:14

0

Fencepost error?在你的代碼中,或者庫或你對庫的使用?在進行浮點數據的整數像素報告時舍入錯誤?

+0

可能是fencepost錯誤,但我不知道在哪裏。也許這是我不瞭解的座標系統的一些神器。上面的代碼中舍入x/y值僅僅是爲了方便。如果我報告完整的浮點值,它是一個整數值(正如我對鼠標位置的預期)。 – Scott 2010-07-14 14:23:22

+0

查看我的答案 - 事件y值是基於1的。 – 2010-07-14 20:43:06