有人遇到过这个问题吗?这看起来像是苹果代码中的错误,如果人们同意该代码应按我认为的方式工作,我将提交雷达报告。我对CoreGraphics颜色管理不是很熟悉,因此我在问苹果问题报告之前询问我。
CoreGraphics
这是直接来自模板项目的,唯一的非模板代码是您在下面看到的内容。请注意,红色,绿色和蓝色均显示正确的组件值,但不显示白色或黑色。
如果先更改顺序,例如黑色和白色,然后更改红色,绿色和蓝色,则问题仍然存在。
这是Swift 1.2和Xcode 6.3.1(6D1002)。
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let colorComps = [ CGColorGetComponents(UIColor.redColor().CGColor), CGColorGetComponents(UIColor.greenColor().CGColor), CGColorGetComponents(UIColor.blueColor().CGColor), CGColorGetComponents(UIColor.blackColor().CGColor), CGColorGetComponents(UIColor.whiteColor().CGColor) ] var components = [CGFloat]() for cc in colorComps { for i in 0...3 { components.append(cc[i]) } } println("components: \(components)") } }
什么你不抓是关于CGColorGetComponents,没有什么做任何声明或担保, 有多少 成分有或 什么 他们的意思。 该 信息包含在颜色的颜色空间中。如果查看白色和黑色的色彩空间,您会发现它们都是灰色形式:
let sp = CGColorGetColorSpace(UIColor.whiteColor().CGColor) println(sp) // kCGColorSpaceDeviceGrey
因此,它们仅用 两个 值表示:灰度值和alpha。
因此,白色是[1.0,1.0]-如果您忽略了多余的两个数字,那么这些数字本来就是您想要的,而这两个数字本来就不应该您首先阅读的。
[1.0,1.0]
同样,black是[0.0,1.0],这也是您所得到的。
[0.0,1.0]