2

実際には、カスタム statusItemView で選択NSStatusItemしたオブジェクトの背景を描画したいと考えています。CALayerしかしそれ以来

- (void)drawStatusBarBackgroundInRect:(NSRect)rect withHighlight:(BOOL)highlight

レイヤーでは動かない(?) backgroundColorプロパティで色を描画してみました。しかし、selectedMenuItemColor を RGB に変換しても、あまり役に立ちません。グラデーションなしでとてもシンプルに見えます。:-/

私はこのコードでに変換[NSColor selectedMenuItemColor]しました:CGColorRef

- (CGColorRef)highlightColor {
    static CGColorRef highlight = NULL;
    if(highlight == NULL) {
        CGFloat red, green, blue, alpha;
        NSColor *hlclr = [[NSColor selectedMenuItemColor] colorUsingColorSpace:
                     [NSColorSpace genericRGBColorSpace]];
        [hlclr getRed:&red green:&green blue:&blue alpha:&alpha];
        CGFloat values[4] = {red, green, blue, alpha};
        highlight = CGColorCreate([self genericRGBSpace], values);
    }
    return highlight;
}

CALayer でネイティブに見える statusitem の背景を描画する方法はありますか?

4

3 に答える 3

3
NSImage *backgroundImage = [[NSImage alloc] initWithSize:self.frame.size]];
[backgroundImage lockFocus];
[self.statusItem drawStatusBarBackgroundInRect:self.bounds withHighlight:YES];
[backgroundImage unlockFocus];
[self.layer setContents:backgroundImage];
[backgroundImage release];
于 2012-04-14T06:21:08.433 に答える
2

CALayerをサブクラス化し、CGContextのNSGraphicsContextを作成するメソッドdrawInContext:実装し、NSGraphicsContextを現在のコンテキストとして設定してから、ステータスアイテムに背景を描画するように指示してみてください。

于 2010-01-08T23:15:28.410 に答える