有没有人遇到过这个问题?它看起来像Apple 's code and I will submit a radar if people agree that this code should do what I think it should do. I'中的一个错误并不是所有熟悉 CoreGraphics
颜色管理的错误,因此我在问我错误之前向Apple提出错误报告 .
这直接来自模板项目,唯一的非模板代码就是您在下面看到的 . 请注意,红色,绿色和蓝色都显示正确的组件值,但不显示白色或黑色 .
如果您更改顺序,例如首先是黑色和白色,然后是红色,绿色,蓝色,则问题仍然存在 .
这是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)")
}
}
1 回答
您没有意识到的是,CGColorGetComponents没有任何关于有多少组件或它们意味着什么的声明或保证 . 该信息包含在颜色的颜色空间中 . 如果你看一下白色和黑色的颜色空间,你会发现它们都是灰色的形式:
因此,它们仅用两个值表示:灰色量和α值 .
因此,白色是
[1.0,1.0]
- 如果你忽略了你不应该首先阅读的额外两个数字,那就是你得到的 .同样,黑色也是
[0.0,1.0]
,这也是你得到的 .