我想在我的可可应用程序中实现颜色选择器。 (是的,我知道NSColorPanel,我不太喜欢它,滚动我自己的一点是我认为我可以做得更好。)NSColorWell子类没有获取mouseMoved事件
下面是我的选取器当前状态的图片。
Custom viewness! http://ryanballantyne.name/forumstuff/color-picker-shot.jpg
周围色轮的井NSColorWell子类。它们以编程方式实例化,并通过调用色轮类的addSubView将其添加到色轮视图(NSView子类)中。
我想让它可以通过它们的把手拖动颜色井。该行程的开始是当鼠标悬停在手柄上时,光标变为张开的手。可悲的是,I can't use a cursor rect for this because most of my views are rotated。因此,我必须使用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时,那个确实被调用,所以至少有一些事件正在接近我,而不是我想要的。
任何想法?谢谢!
为什么不制作NSColorPicker子类?然后,您的选择器不仅可以添加到现有的颜色面板中,而不会丢弃其功能,但是如果您愿意,甚至可以将其作为插件导出,以便用户可以在任何应用程序中使用您的真棒颜色选择器。 – 2009-08-02 19:05:25
我想过在未来的版本中这样做。首先,我需要向自己证明,我的想法是选择更好的选色器。 – 2009-08-03 00:32:19