Search code examples
iosobjective-cuicolor

How to get mid color between two UIColors in iOS


If i give two colors

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

I should get grayColor as result, how shall I achieve it?


Solution

  • A straightforward way of finding the "in between" is to average the four components, like this:

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

    Note that this produces a midpoint RGBA color space, which is only one of many possible color spaces. Averaging components in other color spaces will lead to a different result.