#目的
nextEventMatchingMaskの使い方について。
Mac Dev Centerにあるサンプル Sketchのコード読み中。
ドローツールのようなものを作ろうとすると「ボタン押下→移動→ボタン離す」で移動や描画などを行う事が多くあるが、 mouseDown, mouseMoved, mouseUpメソッドの組み合わせで作ると処理がばらばらになってコードの見通しが悪くなることがある。
mouseDownをトリガにして、mouseUpまで一つのループで書きたいという場合に nextEventMatchingMaskを使うと良い。
#使い方
カスタムビューを作って以下のように書く
-(void)mouseDown:(NSEvent*)theEvent
{
do {
NSPoint p = [theEvent locationInWindow];
// p = [self convertPoint:p fromView:nil];
NSLog(@"%.0f, %.0f", p.x, p.y]);
theEvent = [NSApp nextEventMatchingMask:(NSLeftMouseDraggedMask | NSLeftMouseUpMask)
untilDate:[NSDate distantFuture]
inMode:NSEventTrackingRunLoopMode
dequeue:YES];
if ([theEvent type] == NSLeftMouseUp)
break;
} while (YES);
}