我希望我的UI支持暗模式,但不希望我的PKCanvasView。我用
myCanvasView.overrideUserInterfaceStyle = .light
因此暗模式不适用于它,并且可以使用:黑线保持黑色,白线保持白色,而UI的其余部分响应系统设置。
但是,当我尝试像这样捕获PKDrawing的图像时:
myCanvasView.drawing.image(from: myCanvasView.bounds, scale: CGFloat(1.0))
启用暗模式时,图像上的白线变为黑色,黑线变为白色。我在所有ViewController上都将overrideUserInterfaceStyle设置为.light,但是图形的图像仍受系统设置影响。仅当在info.plist文件中覆盖用户界面Stile时,即使我在所有ViewController上将overrideUserInterfaceStyle设置为.dark
,PKDrawing的图像仍会保持我想要的样子。是否有一种方法可以从PKDrawing中获取“灯光模式”图像而又不会覆盖info.plist文件,从而失去了响应系统设置的可能性?对我来说,似乎PKDrawing的image()函数只是检查为应用程序而不是为任何ViewController设置的用户界面样式。由于PKDrawing是不透明的对象,因此无法覆盖该方法。
编辑:我的想法是在info.plist中覆盖该应用程序的界面样式,然后检查系统设置并根据该设置为所有ViewController设置界面样式。这将使图形的图像像应该的那样正常,但保持对系统设置的响应性。但是,我没有找到有关如何检查系统设置中是否启用了暗模式的任何信息。
答案 0 :(得分:3)
我不确定如何解决,但是解决方案非常简单。生成这样的图像:
self.traitCollection.performAsCurrent {
drawingImage = myCanvasView.drawing.image(from: myCanvasView.bounds, scale: CGFloat(1.0))
}
忽略系统暗模式设置,并保持图形不变。
答案 1 :(得分:0)
这是另一种解决方案。如果您需要同步图像,那就更好了。
import PencilKit
extension PKDrawing {
func image(from rect: CGRect, scale: CGFloat, userInterfaceStyle: UIUserInterfaceStyle) -> UIImage {
let currentTraits = UITraitCollection.current
UITraitCollection.current = UITraitCollection(userInterfaceStyle: userInterfaceStyle)
let image = self.image(from: rect, scale: scale)
UITraitCollection.current = currentTraits
return image
}
}