在macOS 10.14 Mojave中使用暗模式时,大多数系统颜色是半透明的。这是为了使控件颜色与窗口背景匹配,而窗口背景又略微着色以与桌面图片匹配。
现在,当使用重叠的CoreAnimation图层构建视图时,事情变得一团糟。示例:
这是使用CALayers构建的自定义滑块。垂直轨道是旋钮层下面的一层。这是我设置颜色的方法:
- (void)updateColors // Called from updateLayer()
{
self.tickmarkLayer.strokeColor = [NSColor tertiaryLabelColor].CGColor;
self.tickmarkLayer.lineWidth = 1.0;
self.trackLayer.backgroundColor = [NSColor controlBackgroundColor].CGColor;
self.trackLayer.borderColor = [NSColor tertiaryLabelColor].CGColor;
self.trackLayer.borderWidth = 1.0;
self.sliderLayer.backgroundColor = [NSColor controlColor].CGColor;
}
当然,我不希望旋钮透明。 e。跟踪层不应发光。在保留动态色彩的同时如何解决此问题?
理想情况下,可以使用当前的色度且没有透明度来访问“有效”系统的颜色。但是我没有找到这样做的API。
将阴影应用于具有透明(系统)颜色的图层时,也会发生类似的问题。
谢谢!
答案 0 :(得分:4)
NSColor的colorWithAlphaComponent:
为您解决问题吗?
即
self.sliderLayer.backgroundColor = [[NSColor controlColor] colorWithAlphaComponent:1.0f].CGColor;
darkMode似乎将控件颜色的alpha分量设置为:0.247059
答案 1 :(得分:4)
我会尝试的事情:
请参阅Supporting Dark Mode in Your Interface中的“使用既定方法更新自定义视图”以确保颜色是动态更新的。