将 UIColor(扩展范围 sRGB)转换为 CIColor

Jak*_*san 3 colors uicolor swift swift3 ios10

当我在 iOS 10.2.1 上运行以下 Swift 3.0.1 行时:

let color = CIColor(color: UIColor(hue: 0.72, saturation: 1.00, brightness: 0.78, alpha: 1));
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

'*** -CIColor 没有为 UIColor UIExtendedGrayColorSpace 1 1 定义;需要首先转换色彩空间。”

根据文档:

颜色对象。该对象表示的颜色信息位于 RGB 颜色空间中。在针对 iOS 10 或更高版本链接的应用程序上,颜色在扩展范围 sRGB 颜色空间中指定。在早期版本的 iOS 中,颜色是在设备 RGB 色彩空间中指定的。

来源:https ://developer.apple.com/reference/uikit/uicolor/1621931-init

既然 is在设备 RGB 色彩空间中并且is 在扩展 sRGB 色彩空间中,那么CIColor从中获取 的适当语法是什么?UIColorCIColorUIColor

Jak*_*san 5

根据评论中提供的反馈,我找到了错误的根源:

稍后在该方法中,我在 UIColor 的实例上调用 .ciColor。这会失败,因为 UIColor 实例不是由 CIColor 首先创建的。

似乎满足以下条件:

  • UIColor => CIColor:必须由 CIColor(color: UIColor instance) 构造函数初始化
  • CIColor => UIColor => CIColor:.ciColor 属性可用。