Рисование правильных цветов CALayer в честь NSAppearance

Я изучаю их приложение, настроив window.appearance, В моем приложении я рисую некоторые вещи внутри слоев. Я также использую Core Plot, который отображает графики в слоях.

Для отображения цвета по умолчанию я просто использую системные цвета (такие как NSColor.textColor а также NSColor.gridColor) и они нарисованы в правильном цвете в CALayer, Но изменение внешнего вида окна на яркие темные приводит к тому, что цвета отображаются неправильно. Is there any way to obtain the correct color for a givenNSAppearance? Приватный 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 оба отображаются правильно:

введите описание изображения здесь

Однако в темном ярком окне этого не происходит, а в текстовом поле:

введите описание изображения здесь

Я хотел бы знать, как получить правильный цвет для данного NSAppearance,

1 ответ

Решение

Так что у меня был неправильный подход.

Правильный способ сделать это, это реализовать -updateLayer в представлении и принять цвета " CGColor снимок есть. -updateLayer вызывается при изменении внешнего вида, поэтому представление может обновить его с правильными значениями цвета.

Другие вопросы по тегам