1

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

谢谢,

凯文

4

1 回答 1

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 以跟踪该状态。然后,每当发生任何会改变突出显示状态的事情时,您都会将视图设置为需要重新显示。例如,您可以在 set/get 方法中执行此操作:

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

然后,更新您的 drawRect: 方法以考虑 isHighlighted 标志。如何获得未突出显示的外观可能取决于图像视图的样式。您可以尝试只调用 super 进行绘图,但如果在测试中,您看到 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];
   }
}
于 2010-11-29T23:48:49.337 回答