Frage

Gibt es eine Möglichkeit, eine NSIMageView mit der Standard -Highlight -Farbe des Mac "hervorzuheben"? Ich suche einfach nach einer Möglichkeit, mein NSIMageView zu färben, damit der Benutzer das Objekt problemlos identifizieren kann.

Vielen Dank,

Kevin

War es hilfreich?

Lösung

Wenn eine der integrierten Optionen von NSIMageView nicht ausreicht, können Sie NsimageView unterklassen und in Drawrect: tun:

- (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
}

Ahh, um es als variabler Zustand zu haben, würde ich wahrscheinlich eine Instanzvariable definieren, wie z. Immer wenn etwas passiert, das den hervorgehobenen Zustand verändert, werden Sie die Ansicht festlegen, dass sie wieder entlastet werden müssen. Sie können dies beispielsweise im SET/GET -Methoden tun:

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

Aktualisieren Sie dann Ihre DrawRect: Methode, um das iShighlight -Flag zu berücksichtigen. Wie Sie einen ungebildeten Look erzielen, kann von der Bildstil abhängen. Sie könnten versuchen, nur Super zu rufen, um die Zeichnung durchzuführen, aber wenn Sie beim Testen alle restlichen oder streunenden Pixelinformationen sehen, die Supers Zeichnung nicht überschrieben haben, möchten Sie vielleicht zuerst klare Farbe zeichnen und dann Super anrufen.

Also so etwas:

- (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];
   }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top