Attention! Translated article might be found on my English blog.

2016年9月29日木曜日

ドラッグ中にのみマウスカーソルを変える

通常カーソルはresetCursorRectsをオーバーライドし、その中でaddCursorRect:cursor:することで制御します。
しかし、この方法ではビューやウインドウ外に出るとカーソルが元に戻ってしまいます。

ドラッグ中のみカーソルを変えたい場合、例えばこのように実装すると良さそうです。
#pragma mark - NSResponder

- (void)mouseDown:(NSEvent *)theEvent {
    [self.window disableCursorRects];
    [[NSCursor closedHandCursor] set];
}

- (void)mouseUp:(NSEvent *)event {
    [self.window enableCursorRects];
}
こうすることでカーソルがウインドウ外に出た場合でもカーソルの状態が維持されるほか、
マウスボタンを離すとカーソルが元に戻ります。