【问题标题】:Get Image of PKDrawing in Light mode在 Light 模式下获取 PKDrawing 的图像
【发布时间】:2020-02-18 11:09:24
【问题描述】:

我希望我的 UI 支持暗模式,但不支持我的 PKCanvasView。我用过

myCanvasView.overrideUserInterfaceStyle = .light

所以暗模式不适用于它并且它有效:黑线保持黑色,白色线保持白色,而 UI 的其余部分响应系统设置。

但是,当我尝试像这样捕获 PKDrawing 的图像时:

myCanvasView.drawing.image(from: myCanvasView.bounds, scale: CGFloat(1.0))

激活暗模式时,图像上的白线变为黑色,黑线变为白色。我在我的所有 ViewController 上将 overrideUserInterfaceStyle 设置为 .light,但绘图的图像仍然受系统设置的影响。只有在 info.plist 文件中覆盖用户界面 Stile 时,PKDrawing 的图像才会保持我想要的样子,即使我将所有 ViewController 上的 overrideUserInterfaceStyle 设置为 .dark

有没有一种方法可以从 PKDrawing 中获取“灯光模式”图像,而不会覆盖 info.plist 文件,从而失去响应系统设置的可能性?在我看来,PKDrawing 的 image() 函数似乎只是检查为应用程序设置的用户界面样式,而不是为任何 ViewControllers 设置的。由于 PKDrawing 是一个不透明的对象,因此无法覆盖该方法。

编辑:我的想法是在 info.plist 中覆盖应用程序的界面样式,然后检查系统设置并根据设置为所有 ViewControllers 设置界面样式。这将使绘图的图像正常,但保持对系统设置的响应。但是,我没有找到任何有关如何检查系统设置中是否启用暗模式的信息。

【问题讨论】:

    标签: ios swift xcode ipad


    【解决方案1】:

    我不确定我是怎么想出来的,但解决方案很简单。像这样生成图像:

    self.traitCollection.performAsCurrent {
        drawingImage = myCanvasView.drawing.image(from: myCanvasView.bounds, scale: CGFloat(1.0))
    }
    

    忽略系统暗模式设置并保持绘图不变。

    【讨论】:

      【解决方案2】:

      这是另一种解决方案。如果您需要同步图像,那就更好了。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-18
        • 2018-10-13
        • 1970-01-01
        • 2016-10-31
        • 1970-01-01
        • 1970-01-01
        • 2016-12-05
        • 1970-01-01
        相关资源
        最近更新 更多