Я пытаюсь реализовать палитру цветов в моем приложении Какао. (Да, я знаю о NSColorPanel. Мне это не очень нравится. Смысл того, чтобы кататься самостоятельно, заключается в том, что я думаю, что могу добиться большего.)
Вот изображение текущего состояния моего сборщика.
(источник: ryanballantyne.name )
Лунки, окружающие цветовое колесо, являются подклассами NSColorWell. Они создаются программно и добавляются в представление цветового круга (подкласс NSView), вызывая addSubView для класса цветового колеса.
Я хочу сделать так, чтобы вы могли перетаскивать цветные ямы вокруг их ручками. В начале этого путешествия курсор меняется на открытую руку, когда мышь наводится на рукоятки. К сожалению, Я не могу использовать прямоугольник курсора для этого, потому что большинство моих представлений повернуто . Поэтому я должен использовать события 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, этот вызывает , поэтому по крайней мере некоторые события достигают меня, но не те, которые я хочу.
Есть идеи? Спасибо!