根据 NSAppearance 绘制正确的 CALayer 颜色
Drawing correct CALayer colors honoring NSAppearance
我正在研究通过设置 window.appearance
来为我的应用设置主题。
在我的应用程序中,我在图层内绘制了一些东西。我还使用 Core Plot,它会分层呈现图表。
对于默认的浅绿色外观,我只使用系统颜色(例如 NSColor.textColor
和 NSColor.gridColor
),它们在 CALayer
中以正确的颜色绘制。但是将 window 的外观更改为鲜艳的深色会导致颜色绘制不正确。
Is there any way to obtain the correct color for a given
NS外观?私人 API 也可以接受。
如果问题不清楚,这里有一个非常简单的例子来说明问题。
我设置了一个作为主视图子层的子层添加的 CATextLayer
和一个作为子视图添加的 NSTextFied
:
CATextLayer* textLayer = [CATextLayer new];
textLayer.string = @"Is this colored correctly? (Layer)";
textLayer.foregroundColor = NSColor.textColor.CGColor;
textLayer.contentsScale = 2.0;
textLayer.frame = (CGRect){0,0, [textLayer preferredFrameSize]};
NSTextField* textField = [NSTextField new];
textField.stringValue = @"Is this colored correctly? (View)";
textField.textColor = NSColor.textColor;
textField.font = (__bridge id)textLayer.font;
textField.editable = NO;
textField.selectable = NO;
textField.bezeled = NO;
textField.backgroundColor = nil;
[textField sizeToFit];
textField.frame = (CGRect){0, 60, textField.bounds.size};
[self.view.layer addSublayer:textLayer];
[self.view addSubview:textField];
在 Aqua window 上,两者都正确显示:
但是,在充满活力的黑暗 window 上,图层不会,而文本字段会:
我想知道如何获得给定 NSAppearance
的正确颜色。
所以我的方法不对。
正确的方法是在视图中实现 -updateLayer
并在那里获取颜色的 CGColor
快照。 -updateLayer
在外观发生变化时调用,因此视图可以使用正确的颜色值更新它。
我正在研究通过设置 window.appearance
来为我的应用设置主题。
在我的应用程序中,我在图层内绘制了一些东西。我还使用 Core Plot,它会分层呈现图表。
对于默认的浅绿色外观,我只使用系统颜色(例如 NSColor.textColor
和 NSColor.gridColor
),它们在 CALayer
中以正确的颜色绘制。但是将 window 的外观更改为鲜艳的深色会导致颜色绘制不正确。
Is there any way to obtain the correct color for a given
NS外观?私人 API 也可以接受。
如果问题不清楚,这里有一个非常简单的例子来说明问题。
我设置了一个作为主视图子层的子层添加的 CATextLayer
和一个作为子视图添加的 NSTextFied
:
CATextLayer* textLayer = [CATextLayer new];
textLayer.string = @"Is this colored correctly? (Layer)";
textLayer.foregroundColor = NSColor.textColor.CGColor;
textLayer.contentsScale = 2.0;
textLayer.frame = (CGRect){0,0, [textLayer preferredFrameSize]};
NSTextField* textField = [NSTextField new];
textField.stringValue = @"Is this colored correctly? (View)";
textField.textColor = NSColor.textColor;
textField.font = (__bridge id)textLayer.font;
textField.editable = NO;
textField.selectable = NO;
textField.bezeled = NO;
textField.backgroundColor = nil;
[textField sizeToFit];
textField.frame = (CGRect){0, 60, textField.bounds.size};
[self.view.layer addSublayer:textLayer];
[self.view addSubview:textField];
在 Aqua window 上,两者都正确显示:
但是,在充满活力的黑暗 window 上,图层不会,而文本字段会:
我想知道如何获得给定 NSAppearance
的正确颜色。
所以我的方法不对。
正确的方法是在视图中实现 -updateLayer
并在那里获取颜色的 CGColor
快照。 -updateLayer
在外观发生变化时调用,因此视图可以使用正确的颜色值更新它。