在灯光模式下获取PKDrawing的图像

时间:2019-10-22 10:10:46

标签: ios swift xcode ipad

我希望我的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设置界面样式。这将使图形的图像像应该的那样正常,但保持对系统设置的响应性。但是,我没有找到有关如何检查系统设置中是否启用了暗模式的任何信息。

2 个答案:

答案 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
  }
}