ios - 在 Light 模式下获取 PKDrawing 的图像
问题描述
我希望我的 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 设置界面样式。这将使绘图的图像正常,但保持对系统设置的响应。但是,我没有找到任何有关如何检查系统设置中是否启用暗模式的信息。
解决方案
我不知道我是怎么想出来的,但解决方案很简单。像这样生成图像:
self.traitCollection.performAsCurrent {
drawingImage = myCanvasView.drawing.image(from: myCanvasView.bounds, scale: CGFloat(1.0))
}
忽略系统暗模式设置并保持绘图不变。
推荐阅读
- excel - Excel 注释不会停留在单元格附近
- javascript - 这个按位运算的技术名称是什么?
- c# - 在一次上下文调用中加载多个导航属性
- dart - Flutter - 到目前为止还不可能在 Firestore 中使用 Algolia 实现搜索功能吗?
- android-studio - iPhone XS 在 Android Studio for Flutter App 中无法正确识别
- java - InputMismatchException 被捕获后程序崩溃
- javascript - React Native - 增加圆圈大小然后减小
- c# - C# MVC.Net 控制器简化
- akamai - 默认情况下缓存在 Akamai 的响应标头?
- neo4j - 使用密码显示具有超过 1 个关系的节点的所有传出关系