前回のスクラップブックでドラッグにあわせて Viewのサイズを変えたが、使いづらいのでサイズを固定することにした。
mouseDown: の中で呼出していた resizeWithRect: をコメントアウトし、InterfaceBuilderで WorkViewのサイズを(1000,1000)、Windowの最大サイズを (1000,1000)にした。
Viewが広くなったのでスクロールしていろいろな場所に画像を配置することができる。どうせなら画像をドラッグして画面の端へ移動させた時に自動的にスクロールするようにしたい。
Viewにはこれを簡単に行うことのできる便利なメソッドが用意されている。
[NSView autoscroll:]
このメッセージを NSViewへ送ると、外側の NSScrollView がこれを適切に処理してくれる。
Supporting Automatic Scrolling
ドラッグ処理に1行加える。
WorkView.m
- (void)mouseDown:(NSEvent *)theEvent
:
while (1) {
theEvent = [[self window] nextEventMatchingMask:(NSLeftMouseDraggedMask | NSLeftMouseUpMask)];
current_point = [self convertPoint:[theEvent locationInWindow]
fromView:nil];
[self autoscroll:theEvent]; // <--追加
:
Cocoaは良くできている...感心。