颜色 5.13.0

颜色 5.13.0

测试已测试
语言语言 Obj-CObjective C
许可 自定义
发布上次发布2016年2月

Ben Gordon 维护。



颜色 5.13.0

  • 作者:
  • Ben Gordon

安装

将包含的Colours.hColours.m文件拖动到您的项目中。它们位于顶层目录中。您还可以通过包含的Xcode项目查看如何使用这些文件的演示。

#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

目录

颜色调板

infoBlueColor infoBlueColor successColor successColor warningColor warningColor
dangerColor dangerColor antiqueWhiteColor antiqueWhiteColor oldLaceColor oldLaceColor
ivoryColor ivoryColor seashellColor seashellColor ghostWhiteColor ghostWhiteColor
snowColor snowColor linenColor linenColor black25PercentColor black25PercentColor
black50PercentColor black50PercentColor black75PercentColor black75PercentColor warmGrayColor warmGrayColor
coolGrayColor coolGrayColor charcoalColor charcoalColor tealColor tealColor
steelBlueColor steelBlueColor robinEggColor robinEggColor pastelBlueColor pastelBlueColor
turquoiseColor turquoiseColor skyBlueColor skyBlueColor indigoColor indigoColor
denimColor denimColor blueberryColor blueberryColor cornflowerColor cornflowerColor
babyBlueColor babyBlueColor midnightBlueColor midnightBlueColor fadedBlueColor fadedBlueColor
icebergColor icebergColor waveColor waveColor emeraldColor emeraldColor
grassColor grassColor pastelGreenColor pastelGreenColor seafoamColor seafoamColor
paleGreenColor paleGreenColor cactusGreenColor cactusGreenColor chartreuseColor chartreuseColor
hollyGreenColor hollyGreenColor oliveColor oliveColor oliveDrabColor oliveDrabColor
moneyGreenColor moneyGreenColor honeydewColor honeydewColor limeColor limeColor
cardTableColor cardTableColor salmonColor salmonColor brickRedColor 砖红色
easterPinkColor 复活节粉红色 grapefruitColor 葡萄柚色 pinkColor 粉红色
indianRedColor 印度红色 strawberryColor 草莓色 coralColor 珊瑚色
maroonColor 栗色 watermelonColor 西瓜色 tomatoColor 西红柿色
pinkLipstickColor 粉色唇膏色 paleRoseColor 浅粉色 crimsonColor 绯红色
eggplantColor 茄子色 pastelPurpleColor 糖果紫色 palePurpleColor 浅紫色
coolPurpleColor 冷紫色 violetColor 紫色 plumColor 梅子色
lavenderColor 薰衣草色 raspberryColor 覆盆子色 fuschiaColor 粉红色
grapeColor 葡萄色 periwinkleColor 矢车菊色 orchidColor 兰色
goldenrodColor 麦色 yellowGreenColor 黄绿色 bananaColor 香蕉色
mustardColor 芥末色 buttermilkColor 黄油色 goldColor 金色
creamColor 奶油色 lightCreamColor 浅奶油色 wheatColor 小麦色
beigeColor 米色 peachColor 桃色 burntOrangeColor 焦橙色
pastelOrangeColor 糖果橙色 cantaloupeColor 哈密瓜色 carrotColor 胡萝卜色
mandarinColor 橘子色 chiliPowderColor 红辣椒粉色 burntSiennaColor 赭色
chocolateColor 巧克力色 coffeeColor 咖啡色 cinnamonColor 肉桂色
almondColor 杏仁色 eggshellColor 蛋壳色 sandColor 沙色
mudColor 泥色 siennaColor 赭石色 dustColor 尘埃色

使用预定义颜色

Colours设计得就像使用苹果预定义的系统颜色一样准确。例如,要获取鲜艳的红色,你可以键入[UIColor redColor]。不过,没有深入研究colorWithRed:green:blue:alpha:方法并对其进行定制,你无法得到很多变化。好吧,我自作主张地创建了一百种颜色,以便以苹果使用在iOS中相同的方式使用。因此,代替之前的redColor示例,只需替换上表中的一种颜色,例如:[UIColor indigoColor]

颜色辅助方法

除了毫无费力地给你一大堆颜色外,这个类别还提供了一些方法,允许对颜色进行不同的操作和转换。以下是使用这些方法的说明

十六进制字符串

您可以使用以下方法非常容易地将常见的十六进制颜色字符串(感谢CSS)转换为UIColor,反之亦然:

UIColor *newColor = [UIColor colorFromHexString:@"#f587e4"];
NSString *hexString = [newColor hexString];

RGBA

从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];

HSBA

类似于上面的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];

CIELAB

类似于上面的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];

CMYK

和上面的两种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

  • ColorSchemeAnalagous
  • ColorSchemeMonochromatic
  • ColorSchemeTriad
  • ColorSchemeComplementary

以下是不同示例,从基于[UIColor seafoamColor]的颜色方案开始。

ColorSchemeAnalagous

Analagous

ColorSchemeMonochromatic

Monochromatic

ColorSchemeTriad

Triad

ColorSchemeComplementary

Complementary

Android

我的朋友Matt York已经将这个存储库移植到了Android,因此您也可以在Android应用程序中使用这些相同的颜色和颜色方法。您可以在这里找到它:Colours for Android

Xamarin

akamud已经将这个库作为Xamarin Android组件进行了移植,您可以在https://github.com/akamud/Colours上找到它。iOS Xamarin组件也在开发中。

Reap What I Sow!

该项目遵循标准的MIT许可证。请使用此许可证并根据您的意愿进行修改 - 并推荐任何有助于代码的酷炫变更。

Bitdeli Badge