ColorUtils 1.1.3

ColorUtils 1.1.3

测试测试通过
Lang语言 Obj-CObjective C
许可证 zlib
发布最后发布2014年12月

Nick Lockwood维护。



  • 作者:
  • Nick Lockwood

目的

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 版本

  • 支持构建目标 - iOS 8.0 (Xcode 6.0, Apple LLVM 编译器 6.0)
  • 最早支持部署目标 - iOS 6.0
  • 最早兼容部署目标 - iOS 4.3

注意:'支持'意味着库已经与该版本进行了测试。'兼容'意味着库应该在该 iOS 版本上运行(即它不依赖于任何不可用的 SDK 功能),但不再对该版本进行兼容性测试,可能需要调整或修复错误才能正确运行。

ARC 兼容性

自 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 方法。

方法

  • (void)registerColor:(UIColor *)color forName:(NSString *)name;

将具有特定名称的自定义为.getColor方法使用登记。

  • (UIColor *)colorWithString:(NSString *)string;
  • (UIColor *)initWithString:(NSString *)string;

这些方法通过解析提供的字符串创建颜色对象。首先检查字符串是否与任何标准颜色常量名称匹配(检查不区分大小写),如果不匹配,则尝试将字符串解析为十六进制值。

十六进制字符串可以以 #、0x 或 nothing 前缀开头,可以包含 3、6 或 8 个数字。6 个数字是标准的 rrggbb 格式,8 个数字与 rrggbb 格式相同,但包含 alpha 分量,3 个数字是 CSS 中常用的缩写,其中每个十六进制数字都重复,例如 #29f 成为 #2299ff。

  • (UIColor *)colorWithRGBValue:(uint32_t)rgb;
  • (UIColor *)initWithRGBValue:(uint32_t)rgb;

这些方法使用作为整数的单个 RGB 值创建颜色。这听起来可能有些神秘,直到你意识到这样的值可以很容易地使用十六进制常量创建,例如 0xff0000 表示红色。这比使用十六进制字符串更有效。

  • (UIColor *)colorWithRGBAValue:(uint32_t)rgba;
  • (UIColor *)initWithRGBAValue:(uint32_t)rgba;

此方法与 colorWithRGBValue 相同,除了输入值包括 alpha 分量,例如 0xff00007f 表示50%透明的红色。不要混淆 colorWithRGBValuecolorWithRGBAValue 方法,因为 RGB 整数值和 RGBA 整数值是不可互换的。

  • (uint32_t)RGBValue;

这返回颜色RGB组件的单个整数值。这对于将颜色值保存到磁盘非常有用,并且可以用作 colorWithRGBValue 方法的输入来稍后重新创建 UIColor。此值难以解释,但您可以使用 NSLog(@"color: %.6x", intColorValue) 将它转换为一个更易读的十六进制值。注意,此方法仅为单色或 RGB(A) 颜色工作。任何其他格式(例如模式)将记录警告并返回0(黑色)。

  • (uint32_t)RGBAValue;

此方法与 RGBValue 相同,除了返回的值包括 alpha 分量。您可以使用 NSLog(@"color: %.8x", intColorValue) 将其转换为十六进制字符串。按照上述方法,此方法也仅适用于单色或 RGB(A) 颜色。

  • (NSString *)stringValue;

此方法通过首先将该颜色与已知颜色常量匹配并返回其名称(如果有匹配),然后将其转换为 6 或 8 位十六进制字符串来将颜色转换为字符串,具体取决于颜色是否具有 alpha 分量。此值对记录或显示颜色非常有用,并且也可以用于通过将字符串传递到 colorWithString 方法来保存和重新创建颜色。

  • (BOOL)isMonochromeOrRGB;

此方法返回color是否是单色或RGB格式颜色。由于许多ColorUtils方法仅在these颜色类型上正确工作,因此此检查可能很有用。

  • (BOOL)isEquivalent:(id)object;

标准的UIColor isEqual方法在两种颜色外观相同但组件数量不同时返回NO。这意味着[UIColor blackColor]被视为与[UIColor colorWithRed:0 green:0 blue:0 alpha:1]不同,尽管它们在屏幕上相同。isEquivalent方法比较颜色的RGBAValue值,因此是比较颜色相等性的更便捷方式。如果颜色不是单色或RGB,则返回isEqual:的结果。

  • (BOOL)isEquivalentToColor:(UIColor *)color;

isEquivalent相同,但如果你已知道正在比较的对象是UIColor,则稍微更有效。

  • (UIColor *)colorWithBrightness:(CGFloat)brightness;

将乘数应用于颜色的红、绿、蓝分量以改变亮度。亮度参数应在0.0到x之间,0.0返回黑色,1.0返回原始颜色,大于1.0的值使颜色更亮。Alpha不受影响。

  • (UIColor *)colorBlendedWithColor:(UIColor *)color factor:(CGFloat)factor;

使用提供的因子控制混合级别的此方法在两种颜色之间进行混合。因子值应在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

  • 添加缺少的UIKit导入语句
  • ColorUtils现在是完全线程安全的

版本1.1.2

  • 移除了 colorWithBrightness:方法的限制

版本1.1.1

  • 修复了影响arm64构建的一些类型不匹配警告

版本1.1

  • 现在需要ARC
  • 添加了registerColor:forName:方法,用于添加自定义命名颜色
  • 添加了colorWithBrightness:和colorBlendedWithColor:方法
  • 现在符合-Wextra警告级别
  • 添加了CocoaPods podspec文件

版本1.0.3

  • 将ARCHelper宏从.h文件中移出
  • 更改了类文件以提供未来的灵活性
  • 更新了iOS6和ARC的示例

版本1.0.2

  • 添加了自动支持ARC编译目标
  • 现在需要Apple LLVM 3.0编译目标

版本1.0.1

  • 修复了由于初始化颜色时使用名称字符串(例如'blue')而不正确的保留计数而导致的可能崩溃

版本1.0

  • 初始发布