1

Mac のデフォルトのハイライト色で NSImageView を「ハイライト」する方法はありますか? ユーザーがオブジェクトを簡単に識別できるように、nsimageview に色を付ける方法を探しているだけです。

ありがとう、

ケビン

4

1 に答える 1

7

NSImageViewの組み込みオプションの1つでは不十分な場合は、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フラグを考慮に入れます。ハイライトされていない外観を実現する方法は、画像ビューのスタイルによって異なる場合があります。スーパーを呼び出して描画を行うこともできますが、テストで、スーパーの描画で上書きされなかった残留または浮遊ハイライトされたピクセル情報が表示された場合は、最初にクリアカラーを描画してからスーパーを呼び出すことをお勧めします。

だから、このようなもの:

- (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 に答える