Рисование правильных цветов CALayer в честь NSAppearance
Я изучаю их приложение, настроив window.appearance
, В моем приложении я рисую некоторые вещи внутри слоев. Я также использую Core Plot, который отображает графики в слоях.
Для отображения цвета по умолчанию я просто использую системные цвета (такие как NSColor.textColor
а также NSColor.gridColor
) и они нарисованы в правильном цвете в CALayer
, Но изменение внешнего вида окна на яркие темные приводит к тому, что цвета отображаются неправильно.
Is there any way to obtain the correct color for a given
NSAppearance? Приватный 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
вызывается при изменении внешнего вида, поэтому представление может обновить его с правильными значениями цвета.