"CGContextSetStrokeColorWithColor"与iOS 13动态颜色,在深色模



我一直在处理采用新的iOS 13动态颜色的任务,我得到了一个使用CGContextSaveGStateCGContextSetStrokeColorWithColorCGContextAddPath等在屏幕上绘制形状的实现。我认为因为CGContextSetStrokeColorWithColor要求我通过UIColorCGColor,此时我传递的颜色的"动态"性质[UIColor labelColor]基本上被打破了,不再是动态的。

有没有人知道如何处理我使用CGContextSetStrokeColorWithColor绘制但又想利用并添加对新 iOS 13 动态颜色的支持的情况?

事实证明这相当容易。

我拥有的是UIView,其中我持有使用CGContextSetStrokeColorWithColorCALayer实例的NSMutableArray,我传递动态颜色,但将其CGColor传递给CGContextSetStrokeColorWithColor。然后,我使用该layoutSublayersOfLayer设置这些CALayer实例的.frame。在这种情况下,为了更新我将其传递给的那些CALayer实例的颜色,我必须覆盖我的UIView的 traitCollectionDidChange 并调用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];
}
}
}
}

相关内容

  • 没有找到相关文章

最新更新