2010-11-29 25 views
1

有没有办法用mac的默认高亮颜色“突出显示”一个NSImageView?我只是在寻找一种方法来为我的nsimageview着色,以便用户可以轻松识别对象。高亮NSImageView - Objective-c

感谢,

凯文

回答

7

如果NSImageView的内置选项之一是不够的,你可以继承NSImageView,并在drawRect中,这样做:

- (void)drawRect:(NSRect)frame { 
    [super drawRect:frame]; // this takes care of image 
    [NSBezierPath setDefaultLineWidth:4.0]; 
    [[NSColor highlightColor] set]; 
    [NSBezierPath strokeRect:frame]; // will give a 2 pixel wide border 
} 

啊,将它作为一个变量状态,我可能会定义一个实例变量,例如isHighlighted以跟踪该状态。然后,无论什么时候会改变突出显示的状态,您都会将视图设置为需要重新显示。你可以这样做在设置/获得实例方法:

- (void)setHighlighted:(BOOL)aHighlighted { 
    isHighlighted = aHighlighted; 
    [self setNeedsDisplay:YES]; 
} 

然后更新您的drawRect:方法考虑到了isHighlighted标志。您如何实现不突出的外观可能取决于图像视图的风格。你可以尝试调用super来完成绘图,但是如果在测试中,你会看到超级绘图没有覆盖的任何残留或杂散的高亮像素信息,你可能需要先绘制清晰的颜色,然后调用super。

所以,这样的事情:

- (void)drawRect:(NSRect)frame { 
    isHighlighted ? [[NSColor highlightColor] set] : [[NSColor clearColor] set]; 
    [NSBezierPath setDefaultLineWidth:4.0]; 
    if (isHighlighted) { 
     [super drawRect:frame]; 
     [NSBezierPath strokeRect:frame]; // will give a 2 pixel wide border 
    } else { 
     [NSBezierPath fillRect:frame]; 
     [super drawRect:frame]; 
    } 
} 
+0

我如何取消亮点呢? – lab12 2010-11-30 00:53:23