2015-11-04 63 views
8

如果我举两个颜色如何获得颜色中旬2个UIColors之间的iOS

UIColor *color1 = [UIColor blackColor]; 
UIColor *color2 = [UIColor whiteColor]; 

我应该得到grayColor作为结果,我应该怎样实现的呢?

+0

还有一个例子是:如果我给红色和黄色的颜色,我应该得到的橙色。 –

+0

获取红色,蓝色,绿色组件的数值平均值。 –

+0

http://stackoverflow.com/questions/398224/how-to-mix-colors-naturally-with-c方法应该是一样的。只需使用'getRed:green:blue:alpha:'获得红色/蓝色/绿色的值,或者可以使用'getHue:saturation:brightness:alpha:'进行一些工作。 – Larme

回答

13

发现的一种直接的方式“在...之间”是进行平均的四个组成部分,这样的:

UIColor *color1 = [UIColor blackColor]; 
UIColor *color2 = [UIColor whiteColor]; 
CGFloat r1, r2, g1, g2, b1, b2, a1, a2; 
[color1 getRed:&r1 green:&g1 blue:&b1 alpha:&a1]; 
[color2 getRed:&r2 green:&g2 blue:&b2 alpha:&a2]; 
UIColor *avg = [UIColor colorWithRed:(r1+r2)/2.0f 
           green:(g1+g2)/2.0f 
           blue:(b1+b2)/2.0f 
           alpha:(a1+a2)/2.0f]; 

注意,这将产生一个中点RGBA颜色空间,这只是许多可能的颜色空间中的一个。平均其他色彩空间中的组件会导致不同的结果。

+0

['UIColor'类引用](https://developer.apple.com/library/ios/documentation/UIKit/Reference /UIColor_Class/index.html#//apple_ref/occ/instm/UIColor/getRed:green:blue:alpha :)。可能有用 – Arc676

+0

非常感谢你 –

+0

这会始终与预期相符吗?是否有混合两种颜色的可能性,但会变得浑浊而不是预期的颜色? – Fogmeister

2

抢答斯威夫特4+

func blend(colors: [UIColor]) -> UIColor { 
    let componentsSum = colors.reduce((red: CGFloat(0), green: CGFloat(0), blue: CGFloat(0))) { (temp, color) in 
     guard let components = color.cgColor.components else { return temp } 
     return (temp.0 + components[0], temp.1 + components[1], temp.2 + components[2]) 
    } 
    let components = (red: componentsSum.red/CGFloat(colors.count) , 
         green: componentsSum.green/CGFloat(colors.count), 
         blue: componentsSum.blue/CGFloat(colors.count)) 
    return UIColor(red: components.red, green: components.green, blue: components.blue, alpha: 1) 
    } 

它融合了许多颜色,只要你愿意

相关问题