2011-09-18 10 views
8

[NSEvent mouseLocation]を使用してカーソルの位置を取得できますが、これによって画面の座標がわかります。ビューに相対的なカーソルの座標を取得するにはどうすればいいですか?私はAppleのマニュアルを検索し、答えを見つけることができませんでした。Mac OS Xでウィンドウに相対的なカーソル位置を取得する方法は?

違いがある場合は、マウスの位置を常に検索して、すべてのフレーム更新で使用されるようにしたいと考えています。

答えて

7
- (void)mouseMoved:(NSEvent *)event 
{ 
    NSPoint locationInView = [self convertPoint:[event locationInWindow] 
             fromView:nil]; 
} 

また、あなたがのmouseMovedイベントを有効にしていることを確認してください:完全性については

[window setAcceptsMouseMovedEvents:YES]; 
+0

'theEvent'は' event'でなければなりません。 – smacdonald

+1

編集ありがとうございます。 – omz

7
NSPoint myPoint = 
    [myView convertPoint:[myWindow convertScreenToBase:[NSEvent mouseLocation]] 
       fromView:nil]; 
+0

'convertScreenToBase'は非推奨です – rraallvv

9

を、(NSWindowのを使用して)、ウィンドウ座標でのマウスの位置を取得するための直接的な方法があります。ウィンドウレイアウトによっては、ビューの座標と同じになる場合があります。返さ

NSWindow *myWindow; 
NSPoint mousePos; 
... 
mousePos = [myWindow mouseLocationOutsideOfEventStream]; 

座標はウィンドウ共ordsているので、マウスがウィンドウの下/のままであるならば、負の値が戻されます。マウスがウィンドウの右/上にある場合、座標はウィンドウのサイズを超えます。