1
有没有办法用mac的默认高亮颜色“突出显示”一个NSImageView?我只是在寻找一种方法来为我的nsimageview着色,以便用户可以轻松识别对象。高亮NSImageView - Objective-c
感谢,
凯文
有没有办法用mac的默认高亮颜色“突出显示”一个NSImageView?我只是在寻找一种方法来为我的nsimageview着色,以便用户可以轻松识别对象。高亮NSImageView - Objective-c
感谢,
凯文
如果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];
}
}
我如何取消亮点呢? – lab12 2010-11-30 00:53:23