2010-11-29 14 views
1

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

おかげで、

ケビン

答えて

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などのインスタンス変数を定義するのがよいでしょう。次に、強調表示された状態が変化するようなことが起こるたびに、ビューを再表示する必要があると設定します。あなたは、インスタンスのためのメソッドを取得/セットでこれを行うことができます:

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

を次に、あなたのdrawRectを更新:アカウントにisHighlightedフラグを取る方法を。強調表示されていない外観を実現する方法は、画像ビューのスタイルに依存する場合があります。あなたは単に描画を行うために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]; 
    } 
} 
+0

どのように私はそれをアンハイライトしますか? – lab12

+0

私は[super drawFrame:frame]だと思います。すべきだった[super drawRect:frame]; – pixel