-(NSArray *)getGradientColorWithStartColor:(UIColor *)startColor endColor:(UIColor *)endColor step:(NSInteger)step inverse:(BOOL)inverse { //1 get start color rgb CGFloat startR = 0.0, startG = 0.0, startB = 0.0; CGColorRef startColorRGB = [startColor CGColor]; NSInteger startNumComponents = CGColorGetNumberOfComponents(startColorRGB); if (startNumComponents == 4) { const CGFloat *components = CGColorGetComponents(startColorRGB); startR = components[0]; startG = components[1]; startB = components[2]; } //2 get end color rgb CGFloat endR = 0.0, endG = 0.0, endB = 0.0; CGColorRef endColorRGB = [endColor CGColor]; NSInteger endNumComponents = CGColorGetNumberOfComponents(endColorRGB); if (endNumComponents == 4) { const CGFloat *components = CGColorGetComponents(endColorRGB); endR = components[0]; endG = components[1]; endB = components[2]; } //3 calculate total threshold by step CGFloat stepR = 0.0, stepG = 0.0, stepB = 0.0; stepR = step == 1 ? 0 : (endR-startR) / (step - 1); stepG = step == 1 ? 0 : (endG-startG) / (step - 1); stepB = step == 1 ? 0 : (endB-startB) / (step - 1); //calculate uicolor by step CGFloat green = startG; CGFloat red = startR; CGFloat blue = startB; NSMutableArray *stepColorArray = [[NSMutableArray alloc] initWithCapacity:step]; for (NSInteger i = 0; i < step - 1; i++) { red = red + stepR; green = green + stepG; blue = green + stepB; UIColor *color = [UIColor colorWithRed:red green:green blue:blue alpha:0]; [stepColorArray addObject:color]; } return stepColorArray; }