В темном режиме в macOS 10.14 Мохаве большинство системных цветов полупрозрачны.То есть для сопоставления управляющих цветов с фоном окна, который, в свою очередь, слегка окрашен, чтобы соответствовать изображению на рабочем столе.
Теперь при построении представления с перекрывающимися слоями 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;
}
Конечно, я не хочу, чтобы ручка была прозрачной, т.е. слой трека не должен просвечивать.Как обойти это, сохранив динамический оттенок?
В идеале, можно получить доступ к «эффективным» системным цветам с текущим оттенком и без прозрачности.Но я не нашел никакого API для этого.
Аналогичная проблема возникает при применении тени к слоям, которые имеют прозрачные (системные) цвета.
Спасибо!