Это оказалось довольно просто.
У меня был UIView
, в котором я держу NSMutableArray
из CALayer
экземпляров, которые используют CGContextSetStrokeColorWithColor
, и я передаю динамический цвет, нопередать его CGColor
на CGContextSetStrokeColorWithColor
. Затем я использую layoutSublayersOfLayer
, чтобы установить .frame
этих CALayer
экземпляров. В этом сценарии, чтобы обновить цвета тех CALayer
экземпляров, в которых я его передал, мне пришлось переопределить traitCollectionDidChange моего UIView
и вызвать setNeedsDisplay
- (void) traitCollectionDidChange:(UITraitCollection *)previousTraitCollection
{
if (@available(iOS 12.0, *)) {
if (previousTraitCollection.userInterfaceStyle != UIUserInterfaceStyleUnspecified
&& self.traitCollection.userInterfaceStyle != previousTraitCollection.userInterfaceStyle) {
for (CALayer *caLayer in _myCsLayers) {
[caLayer setNeedsDisplay];
}
}
}
}