NSView#dragImage: ... を使いドラッグしている時に呼び出されるメソッドを整理してみる。
(1) ドラッグ実行
- (void)dragImage:(NSImage *)anImage at:(NSPoint)viewLocation offset:(NSSize)initialOffset event:(NSEvent *)event pasteboard:(NSPasteboard *)pboard source:(id)sourceObj slideBack:(BOOL)slideFlag;
呼び出し後、ブロック。ドラッグが終わるまでこの直後のコードは実行されない。
(2) ドラッグ開始
ドラッグ実行直後にドラッグ対象のViewに対して下記のメソッドが呼び出される。
- (void)draggedImage:(NSImage *)image beganAt:(NSPoint)screenPoint
ドラッグ対象の画像と開始位置が取得できる。
(3) ドラッグ中
ドラッグ先が変わるたびに呼び出される。同一 NSViewの場合は最初の一回のみ。それ以外はドラッグ移動中頻繁に呼び出される。
- (unsigned int)draggingSourceOperationMaskForLocal:(BOOL)flag
(4) ドラッグ終了
ドラッグ終了時にドラッグ対象のViewに対して下記のメソッドが呼び出される。
- (void)draggedImage:(NSImage *)image endedAt:(NSPoint)screenPoint operation:(NSDragOperation)operation
画像と終了位置、それに加えてどのようなオペレーション(コピー、移動など)が行われたかが取得できる。
ここには移動がおこわなれた場合のドラッグ元データの削除などを書くと良さそう。
(5) その他
以前説明したように、同じNSViewにインフォーマルプロトコルの NSDraggingDestination が実装されていると、それらのメソッドが通常通り呼び出される。
なお下記は呼び出されなかった。
- (void)mouseUp:(NSEvent *)theEvent