Выделите NSImageView - Objective-c - PullRequest
       14

Выделите NSImageView - Objective-c

1 голос
/ 30 ноября 2010

Есть ли способ «выделить» NSImageView с цветом подсветки по умолчанию для Mac?Я просто ищу способ подкрасить свой nsimageview, чтобы пользователь мог легко определить объект.

Спасибо,

Кевин

1 Ответ

7 голосов
/ 30 ноября 2010

Если одного из встроенных параметров 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];
   }
}
...