font degradado color change ios colors gradient uicolor

ios - degradado - navbar text color ionic



Calcule el color en un punto dado en un gradiente entre dos colores? (3)

El espacio de color RGB es como un círculo. Con la mayor saturación a lo largo del borde exterior y gris en el medio. Al viajar de un color a otro, preferiría estar haciendo eso, a lo largo del mismo radio (círculo) desde el centro; de modo que la saturación y el valor permanecen iguales. En ese caso, el tono está cambiando de forma lineal. No cruzarás hacia un área más gris que la que inicialmente tienen tus colores izquierdo y derecho. Puede viajar desde un anillo interno a un anillo exterior, simplemente suba (o baje) la saturación; de nuevo linealmente Vea here círculo de colores (pruébelo por ejemplo en paint.net)

Las clases de objetivos de Apple (iOS) le permiten trabajar con otros espectros que RGB.

Así que este es esencialmente el método que me gustaría escribir (en Objective-C / Cocoa, usando UIColors , pero realmente me interesan las matemáticas subyacentes):

+ (UIColor *)colorBetweenColor:(UIColor *)startColor andColor:(UIColor *)endColor atLocation:(CGFloat)location;

Como ejemplo, digamos que tengo dos colores, rojo puro y azul puro. Dado un gradiente lineal entre los dos, quiero calcular el color que está, por ejemplo, en la marca del 33% en ese gradiente:
Entonces, si tuviera que llamar a mi método así:

UIColor *resultingColor = [UIColor colorBetweenColor:[UIColor redColor] andColor:[UIColor blueColor] atLocation:0.33f];

1.0f el color resultante en ''B'' y, de manera similar, pasaría 0.0f ya que la ubicación devolvería el color ''A'', y 1.0f devolvería el color ''C''.

Entonces, básicamente, mi pregunta es, ¿cómo voy a mezclar los valores RGB de dos colores y determinar el color en cierta "ubicación" entre ellos?


Simplemente interpolas linealmente los canales rojo, verde y azul como este:

double resultRed = color1.red + percent * (color2.red - color1.red); double resultGreen = color1.green + percent * (color2.green - color1.green); double resultBlue = color1.blue + percent * (color2.blue - color1.blue);

donde el percent es un valor entre 0 y 1 ( location en su primer prototipo de método).


una versión Swift puede ser útil para alguien.

private struct Color { let r: Int let g: Int let b: Int func getColor() -> UIColor { return UIColor(red: CGFloat(r)/255.0, green: CGFloat(g)/255.0, blue: CGFloat(b)/255.0, alpha: 1) } static func getGradientColor(from: Color, to: Color, percentage: CGFloat) -> Color { precondition(percentage >= 0 && percentage <= 1) return Color(r: from.r + Int(CGFloat(to.r - from.r) * percentage), g: from.g + Int(CGFloat(to.g - from.g) * percentage), b: from.b + Int(CGFloat(to.b - from.b) * percentage)) } }