Cocoaアプリにカラーピッカーを実装しようとしています。(はい、NSColorPanelについては知っています。あまり好きではありません。自分でロールすることのポイントは、もっとうまくやれると思うことです。)
これが私のピッカーの現在の状態の写真です。
(ソース:ryanballantyne.name)
カラーホイールを囲むウェルはNSColorWellサブクラスです。これらはプログラムでインスタンス化され、カラーホイールクラスでaddSubViewを呼び出すことにより、カラーホイールビュー(NSViewサブクラス)に追加されます。
グラブハンドルでカラーウェルをドラッグできるようにしたいと思います。その旅の始まりは、マウスをハンドルの上に置くと、カーソルが開いた手に変わることです。残念ながら、ほとんどのビューが回転しているため、これにカーソル長方形を使用することはできません。したがって、mouseMovedイベントを使用して、自分でヒット検出を行う必要があります。
これが私が機能させようとしているマウスイベントコードです:
- (void)mouseMoved:(NSEvent*)event
{
NSLog(@"I am over here!\n");
[super mouseMoved:event];
NSPoint eventPoint = [self convertPoint:[event locationInWindow] fromView:nil];
BOOL isInHandle = [grabHandle containsPoint:eventPoint];
if (isInHandle && [NSCursor currentCursor] != [NSCursor openHandCursor]) {
[[NSCursor openHandCursor] push];
}
else if (!isInHandle) [NSCursor pop];
}
- (void)mouseEntered:(NSEvent*)event
{
[[self window] setAcceptsMouseMovedEvents:YES];
}
- (void)mouseExited:(NSEvent*)event
{
[[self window] setAcceptsMouseMovedEvents:NO];
[NSCursor pop];
}
- (BOOL)acceptsFirstResponder
{
return YES;
}
- (BOOL)resignFirstResponder
{
return YES;
}
mouseMovedメソッドが呼び出されないことがわかりました。出入りの同上。ただし、mouseDownを実装すると、そのイベントが呼び出されるため、必要なイベントだけでなく、少なくともいくつかのイベントが私に届きます。
何か案は?ありがとう!