ColorUtils 是 UIColor 的一个分类,它为它扩展了一些常见的功能,这些功能在标准 API 中被省略了。
UIColor 是 CGColor 的一个薄封装,支持多种不同的格式,使得它非常灵活。但是,这种灵活性以牺牲常用任务的可用性为代价;例如,访问 RGB 颜色的红、绿和蓝色分量并非易事,比较颜色也相当困难,因为 [UIColor blackColor]
与 [UIColor colorWithRed:0 green:0 blue:0 alpha:1]
虽然在屏幕上是相同的,但被视作不同的。ColorUtils 让这些任务变得简单。
另一个常见问题是,RGBA UIColors 使用范围在 0.0 到 1.0 的四个浮点数指定,但几乎所有图形软件都将颜色视为具有 0-255 范围内的整数分量,通常以十六进制字符串的形式表示。ColorUtils 允许你使用十六进制指定颜色,这样你就可以直接从 PhotoShop 中复制和粘贴值。
注意:'支持'意味着库已经与该版本进行了测试。'兼容'意味着库应该在该 iOS 版本上运行(即它不依赖于任何不可用的 SDK 功能),但不再对该版本进行兼容性测试,可能需要调整或修复错误才能正确运行。
自 1.1 版本起,ColorUtils 需要 ARC。如果您希望在非 ARC 项目中使用 ColorUtils,只需将 -fobjc-arc 编译器标志添加到 ColorUtils.m 类中。要做到这一点,请转到目标设置中的构建阶段选项卡,打开编译源分类,双击列表中的 iRate.m,在弹出菜单中输入 -fobjc-arc。
如果您希望将整个项目转换为 ARC,请注释掉 ColorUtils.m 中的 #error 行,然后在 Xcode 中运行 Edit > Refactor > Convert to Objective-C ARC... 工具,并确保所有您希望使用 ARC 的文件都已勾选(包括 ColorUtils.m)。
要在应用程序中使用 ColorUtils,只需将 ColorUtils.h 和 .m 文件拖放到您的项目中。
ColorUtils 方法应该完全线程安全,但是请注意,对 registerColor:forName:
和 colorWithString:
/initWithString:
的调用将被排队,如果来自多个线程的并发调用可能会引起死锁。
@property (nonatomic, readonly) CGFloat red; @property (nonatomic, readonly) CGFloat green; @property (nonatomic, readonly) CGFloat blue; @property (nonatomic, readonly) CGFloat alpha;
这些属性为您提供对红色、绿色、蓝色和alpha颜色分量的直接(只读)访问。当然,并非所有 UIColor 都具有这些属性,因此对于单色颜色,红色、绿色和蓝色的值将相同,而对于 CMYK、图案或索引颜色等非 RGB 颜色,访问这些值时将记录警告,并返回零。为了避免生成这些警告,在尝试访问分量之前,请先调用 isMonochromeOrRGB
方法。
将具有特定名称的自定义为.getColor方法使用登记。
这些方法通过解析提供的字符串创建颜色对象。首先检查字符串是否与任何标准颜色常量名称匹配(检查不区分大小写),如果不匹配,则尝试将字符串解析为十六进制值。
十六进制字符串可以以 #、0x 或 nothing 前缀开头,可以包含 3、6 或 8 个数字。6 个数字是标准的 rrggbb 格式,8 个数字与 rrggbb 格式相同,但包含 alpha 分量,3 个数字是 CSS 中常用的缩写,其中每个十六进制数字都重复,例如 #29f 成为 #2299ff。
这些方法使用作为整数的单个 RGB 值创建颜色。这听起来可能有些神秘,直到你意识到这样的值可以很容易地使用十六进制常量创建,例如 0xff0000 表示红色。这比使用十六进制字符串更有效。
此方法与 colorWithRGBValue
相同,除了输入值包括 alpha 分量,例如 0xff00007f 表示50%透明的红色。不要混淆 colorWithRGBValue
和 colorWithRGBAValue
方法,因为 RGB 整数值和 RGBA 整数值是不可互换的。
这返回颜色RGB组件的单个整数值。这对于将颜色值保存到磁盘非常有用,并且可以用作 colorWithRGBValue
方法的输入来稍后重新创建 UIColor。此值难以解释,但您可以使用 NSLog(@"color: %.6x", intColorValue)
将它转换为一个更易读的十六进制值。注意,此方法仅为单色或 RGB(A) 颜色工作。任何其他格式(例如模式)将记录警告并返回0(黑色)。
此方法与 RGBValue
相同,除了返回的值包括 alpha 分量。您可以使用 NSLog(@"color: %.8x", intColorValue)
将其转换为十六进制字符串。按照上述方法,此方法也仅适用于单色或 RGB(A) 颜色。
此方法通过首先将该颜色与已知颜色常量匹配并返回其名称(如果有匹配),然后将其转换为 6 或 8 位十六进制字符串来将颜色转换为字符串,具体取决于颜色是否具有 alpha 分量。此值对记录或显示颜色非常有用,并且也可以用于通过将字符串传递到 colorWithString
方法来保存和重新创建颜色。
此方法返回color是否是单色或RGB格式颜色。由于许多ColorUtils方法仅在these颜色类型上正确工作,因此此检查可能很有用。
标准的UIColor isEqual方法在两种颜色外观相同但组件数量不同时返回NO。这意味着[UIColor blackColor]
被视为与[UIColor colorWithRed:0 green:0 blue:0 alpha:1]
不同,尽管它们在屏幕上相同。isEquivalent
方法比较颜色的RGBAValue值,因此是比较颜色相等性的更便捷方式。如果颜色不是单色或RGB,则返回isEqual:
的结果。
与isEquivalent
相同,但如果你已知道正在比较的对象是UIColor,则稍微更有效。
将乘数应用于颜色的红、绿、蓝分量以改变亮度。亮度参数应在0.0到x之间,0.0返回黑色,1.0返回原始颜色,大于1.0的值使颜色更亮。Alpha不受影响。
使用提供的因子控制混合级别的此方法在两种颜色之间进行混合。因子值应在0.0到1.0之间,0.0返回接收器,1.0返回提供的颜色。
可以在UIColor文档中找到标准颜色常量的列表,但在此处重复列出以方便使用。在可能的情况下使用颜色常量可以减少内存并提高性能,避免在内存中创建多个相同的UIColor对象。
black - Equivalent to 0.0 white
darkgray - Equivalent to 0.333 white
lightgray - Equivalent to 0.667 white
white - Equivalent to 1.0 white
gray - Equivalent to 0.5 white
red - Equivalent to 1.0, 0.0, 0.0 RGB
green - Equivalent to 0.0, 1.0, 0.0 RGB
blue - Equivalent to 0.0, 0.0, 1.0 RGB
cyan - Equivalent to 0.0, 1.0, 1.0 RGB
yellow - Equivalent to 1.0, 1.0, 0.0 RGB
magenta - Equivalent to 1.0, 0.0, 1.0 RGB
orange - Equivalent to 1.0, 0.5, 0.0 RGB
purple - Equivalent to 0.5, 0.0, 0.5 RGB
brown - Equivalent to 0.6, 0.4, 0.2 RGB
clear - Equivalent to 0.0 white, 0.0 alpha
您可以使用registerColor:forName:
方法注册自定义命名颜色。一旦注册,您的自定义颜色将像标准颜色一样通过colorWithString
/stringValue
方法读取/写入。
大多数方法和属性都具有相当直观的解释,但包含了一个示例,说明如何通过名称或十六进制字符串设置颜色。
版本1.1.3
版本1.1.2
版本1.1.1
版本1.1
版本1.0.3
版本1.0.2
版本1.0.1
版本1.0