2009-04-17 4 views
1

私は親ビューでグリッドに並んだいくつかの景色を眺めることができます(すべてのもののNSViewの)私は オーバーライドしていますは、カーソルが映画の外に移動した後もマウスドラッグイベントを追跡し続ける

- (無効)のmouseDown:(NSEvent *)イベント - (void)mouseDragged:(NSEvent *)子ビューのサブクラスのカスタム描画のtheEvent

具体的には、子ビューのマウスドラッグ中にいくつかの四角形のボックスを描画します。

問題:マウスのドラッグ中にカーソルが子ビューから外れると、明らかにイベントをトラッキングできないため、矩形のサイズを変更できません。 私は事前に

おかげで.....

これを達成するために、任意の明白なまたは複雑な方法はあります(今だけのドラッグイベントのために)...でも、アプリケーションウィンドウの外にマウスの動きを追跡します

ラジェッシュ

答えて

2
- (void)mouseDown:(NSEvent *)theEvent 
{ 
    NSPoint point; 
    while (1) { 
     theEvent = [[self window] nextEventMatchingMask: (NSLeftMouseDraggedMask | NSLeftMouseUpMask)]; 
     point = [self convertPoint: [theEvent locationInWindow] fromView: nil]; 

     // do something with point 

     if ([theEvent type] == NSLeftMouseUp) 
      break; 
    } 
} 
+0

おかげで 'ココアパン'は、魅力のように動作します。 –

1

私は、whileループ内のイベントをインターセプト含まない受け入れ答えに代わるものを提示したいです。

マウスをハンドルがイベントをドラッグ:あなたはNSViewの内部のドラッグを開始し、あなたはそれの外にマウスをドラッグした場合に発生し続ける場合

- (void)mouseDragged:(NSEvent *)theEvent 
{ 
} 

これが発生します。

関連する問題