iOS CGColor 与 UIColor

Posted

技术标签:

【中文标题】iOS CGColor 与 UIColor【英文标题】:iOS CGColor versus UIColor 【发布时间】:2013-11-22 08:49:47 【问题描述】:

我正在使用相同颜色的 2 种变体(浅色和深色)来创建渐变。

代码:

CAGradientLayer *gradient = [CAGradientLayer layer];

UIColor *light = [baseColor lightVersion];

UIColor *dark = [baseColor darkVersion];

gradient.colors = [NSArray arrayWithObjects:(id)[light CGColor], (id)[dark CGColor], nil];

问题是,我注意到原来的UIColor 版本的CGColor 版本是不同的。这是为什么? UIColorCGColor 有什么区别,为什么不一样?

【问题讨论】:

可能是一些伽马校正问题。 【参考方案1】:

UIColor 继承自 NSObject 并与 UIKit Framework 关联,而 CGColorCoreGraphics 关联,CGColor 派生自 CFType

因此,如果您使用 UIKit 元素,则可以使用 UIColor,但如果您使用 Core Graphics 绘图或使用 CALayer,则必须使用 CGColor

根据UIColor的文档

UIKit 中的许多方法都要求您使用 UIColor 对象,对于一般的颜色需求,它应该是你的主要方式 的指定颜色。该对象使用的色彩空间是 为在基于 ios 的设备上使用而优化,因此适用 满足大多数绘图需求。 如果您更喜欢使用 Core Graphics 颜色和 但是,您可以这样做。

【讨论】:

【参考方案2】:

在阅读了您的问题后,我尝试了一个示例项目,在该项目中我使用了具有 RGB 值 (100,100,100) 的背景颜色的标签。并将其边框颜色设置为相同的 RGB 值,但它是 CGColor 但我发现它们没有区别。参考附图。边框宽度为 5 像素。

【讨论】:

【参考方案3】:

UIColor 只是 C 对象CGColor 的一个 Objective-C 对象包装器。应该没有区别。

【讨论】:

【参考方案4】:

UIColourCGColour 之间没有区别。

【讨论】:

这太荒谬了。

以上是关于iOS CGColor 与 UIColor的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发UIColor,CGColor,CIColor三者的区别和联系

我可以从 CGGradient 获得 CGColor 吗?

ios 给view添加一个渐变的背景色

CGColor - CGColorGetComponents 似乎无法正常工作?

删除 UIColor CGColor - KVC 警告

如何正确获取 CGColor 的颜色分量