将包含的
将#import "Colours.h"
添加到您想要使用此分类的类中,设置完成。
Cocoapods
pod 'Colours'
或者,对于Swift:
pod 'Colours/Swift'
NSColor
Colours默认支持NSColor
!请确保您已安装了AppKit
框架(对于新应用来说,这是默认情况下包含的),设置完成后,这份README使用UIColor作为示例,只需用NSColor替换即可,所有方法都是相同的。
Swift
现在存在一个包含Obj-C版本所有内容的Colours Swift版本,除了以下内容:
此外,使用元组而不是字典和颜色组件的数组。因此,在[someRedColor rgbaArray]
而不是的情况下,您将使用someRedColor.rgba()
,它给出一个包含四个CGFloats
的元组,例如(1.0, 0.0, 0.0, 1.0)
。为了获取仅仅是红色值,您将编写someRedColor.rgba().r
。
Colours设计得就像使用苹果预定义的系统颜色一样准确。例如,要获取鲜艳的红色,你可以键入[UIColor redColor]
。不过,没有深入研究colorWithRed:green:blue:alpha:
方法并对其进行定制,你无法得到很多变化。好吧,我自作主张地创建了一百种颜色,以便以苹果使用在iOS中相同的方式使用。因此,代替之前的redColor示例,只需替换上表中的一种颜色,例如:[UIColor indigoColor]
。
除了毫无费力地给你一大堆颜色外,这个类别还提供了一些方法,允许对颜色进行不同的操作和转换。以下是使用这些方法的说明
您可以使用以下方法非常容易地将常见的十六进制颜色字符串(感谢CSS)转换为UIColor,反之亦然:
UIColor *newColor = [UIColor colorFromHexString:@"#f587e4"];
NSString *hexString = [newColor hexString];
从UIColor到RGBA数组和从RGBA数组到UIColor
颜色->数组方法创建了一个数组,包含4个NSNumbers,表示颜色的RGBA值。这些不在0-255的范围内,而是在0-1的范围内进行了归一化。因此,如果您的R是230,则它将表示为数组中的0.902。
NSArray *colorArray = [[UIColor seafoamColor] rgbaArray];
UIColor *newColor = [UIColor colorFromRGBAArray:colorArray];
从UIColor到RGBA字典和从RGBA字典到UIColor
类似于上面提到的数组方法,这个方法返回一个包含NSNumbers的NSDictionary。使用静态键来访问字典中不同的颜色分量。这允许您使用自动纠错更快地使用返回的字典。
kColoursRGBA_R
kColoursRGBA_G
kColoursRGBA_B
kColoursRGBA_A
NSDictionary *colorDict = [[UIColor seafoamColor] rgbaDictionary];
UIColor *newColor = [UIColor colorFromRGBADictionary:colorDict];
// You can also get a single component like so:
NSNumber *r = colorDict[kColoursRGBA_R];
类似于上面的RGBA方法,您也可以从UIColor中获取色调、饱和度和亮度值,并将它们创建为数组或字典,反之亦然。返回的颜色字典也使用了类似于此方法RGBA版本的静态键。以下是可使用的键:
kColoursHSBA_H
kColoursHSBA_S
kColoursHSBA_B
kColoursHSBA_A
NSArray *colorArray = [[UIColor seafoamColor] hsbaArray];
NSDictionary *colorDict = [[UIColor seafoamColor] hsbaDictionary];
UIColor *newColor1 = [UIColor colorFromHSBAArray:colorArray];
UIColor *newColor2 = [UIColor colorFromHSBADictionary:colorDictionary];
类似于上面的RGBA方法,您也可以从UIColor中获得CIE_lightness、CIE_a和CIE_b值,并将它们创建为数组或字典,反之亦然。返回的颜色字典也使用了类似于此方法RGBA版本的静态键。以下是可使用的键:
颜色CIE_L
颜色CIE_A
颜色CIE_B
颜色CIE_alpha
NSArray *colorArray = [[UIColor seafoamColor] CIE_LabArray];
NSDictionary *colorDict = [[UIColor seafoamColor] CIE_LabDictionary];
UIColor *newColor1 = [UIColor colorFromCIE_LabArray:colorArray];
UIColor *newColor2 = [UIColor colorFromCIE_LabDictionary:colorDictionary];
和上面的两种RGBA方法一样,你还可以从UIColor中获取CMYK Y值,并将它们创建为数组或字典,或者反之亦然。返回的颜色字典也使用与RGBA版本相同的静态键。以下是要使用的键
颜色CMYK_C
颜色CMYK_M
颜色CMYK_Y
颜色CMYK_K
NSArray *colorArray = [[UIColor seafoamColor] cmykArray];
NSDictionary *colorDict = [[UIColor seafoamColor] cmykDictionary];
UIColor *newColor1 = [UIColor colorFromCMYKArray:colorArray];
UIColor *newColor2 = [UIColor colorFromCMYKDictionary:colorDictionary];
此方法返回一个字典,包含上面每个键(RGBA,HSBA,CIE_LAB,CMYK)的值。这意味着你可以从同一来源获取色调值和亮度值。以下是使用方法
NSDictionary *components = [someColor colorComponents];
CGFloat H = components[kColoursHSBA_H];
CGFloat L = components[kColoursCIE_L];
您还可以通过在UIColor上调用以下任何方法来检索单个值,而不是整个字典。相比检索一个色调的所有值,这将显著降低速度。如果您需要多个值,请调用上述特定的数组或字典方法。
CGFloat R = [[UIColor tomatoColor] red];
CGFloat G = [[UIColor tomatoColor] green];
CGFloat B = [[UIColor tomatoColor] blue];
CGFloat H = [[UIColor tomatoColor] hue];
CGFloat S = [[UIColor tomatoColor] saturation];
CGFloat B = [[UIColor tomatoColor] brightness];
CGFloat CIE_L = [[UIColor tomatoColor] CIE_Lightness];
CGFloat CIE_A = [[UIColor tomatoColor] CIE_a];
CGFloat CIE_B = [[UIColor tomatoColor] CIE_b];
CGFloat alpha = [[UIColor tomatoColor] alpha];
您可以使用这些方法加深或浅化颜色。唯一的参数是从0到1的浮点数百分比,因此,浅25%的颜色将使用参数0.25。
UIColor *lighterColor = [[UIColor seafoamColor] lighten:0.25f];
UIColor *darkerColor = [[UIColor seafoamColor] darken:0.25f];
很多时候你可能想在特定颜色的视图上放置文本,并确保它上面的字看起来很好。使用这个方法,将返回白色或黑色,具体取决于它们对比度如何。以下是使用方法
UIColor *contrastingColor = [[UIColor seafoamColor] blackOrWhiteContrastingColor];
此方法将创建一个UIColor实例,它是颜色轮上另一个UIColor的完全相反的颜色。保留相同的饱和度和亮度,只是色调改变了。
UIColor *complementary = [[UIColor seafoamColor] complementaryColor];
5.1.0 +
检测两种颜色之间的差异并不像听起来那么简单。首先的直觉是去获取RGB值的差异,得到每个点的差异的和。看起来太棒了!直到你真的开始比较颜色。为什么这两个红色在实际生活中与在计算中的这两个蓝色有不一样的距离呢?人类的视觉感知排在颜色和你的大脑之间的事情的第二位。有些颜色在它们各自区域内感知到的变体比其他颜色要大,因此我们需要一种方法来模拟这种人类对颜色的变化。进入CIELAB。这种颜色公式 supposed to be这种模型。所以现在我们需要标准化任意两种颜色之间距离的单位,而不依赖于人类如何视觉感知这种距离。进入CIE76、94、2000。这些使用经过用户测试的数据和其他具有数学和统计意义的关联来输出信息的方法。你可以阅读下面的wiki文章,以更好地了解我们如何转移到更新、更好的颜色距离公式,以及它们的优缺点。
查找距离
CGFloat distance = [someColor distanceFromColor:someOtherColor type:ColorDistanceCIE94];
BOOL isNoticablySimilar = distance < threshold;
参考资料
您可以使用以下方法根据UIColor创建一个5色方案。它接受一个UIColor和一个在Colours中定义的ColorSchemeTypes。它返回一个包含4个新UIColor对象的NSArray,以创建一个很不错的补色方案,与您传递的根颜色相协调。
NSArray *colorScheme = [color colorSchemeOfType:ColorSchemeType];
ColorSchemeTypes
以下是不同示例,从基于[UIColor seafoamColor]
的颜色方案开始。
ColorSchemeAnalagous
ColorSchemeMonochromatic
ColorSchemeTriad
ColorSchemeComplementary
我的朋友Matt York已经将这个存储库移植到了Android,因此您也可以在Android应用程序中使用这些相同的颜色和颜色方法。您可以在这里找到它:Colours for Android。
akamud已经将这个库作为Xamarin Android组件进行了移植,您可以在https://github.com/akamud/Colours上找到它。iOS Xamarin组件也在开发中。
该项目遵循标准的MIT许可证。请使用此许可证并根据您的意愿进行修改 - 并推荐任何有助于代码的酷炫变更。