puede guardar el gradiente de la máscara cuando se utiliza un CGBlendMode. Es más difícil controlar los colores exactos. Pero si eso no es importante para usted, podría ser un poco más eficiente en términos de líneas de código y tal vez también en términos de rendimiento.
He aquí un ejemplo con algunos colores al azar y CGBlendModeExclusion (CGBlendModeDifference le da un efecto similar)
- (void) drawRect:(CGRect)rect
{
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetBlendMode(ctx, kCGBlendModeExclusion);
CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
CGFloat col1[8] = {
1.0, 0.0, 0.0, 1.0,
0.0, 0.0, 1.0, 1.0
};
CGGradientRef grad1 = CGGradientCreateWithColorComponents (space, col1, NULL, 2);
CGContextDrawLinearGradient(ctx, grad1, CGPointMake(0, 0), CGPointMake(0, 320), 0);
CGFloat col2[8] = {
1.0, 0.5, 0.0, 1.0,
0.0, 1.0, 0.0, 1.0
};
CGGradientRef grad2 = CGGradientCreateWithColorComponents (space, col2, NULL, 2);
CGContextDrawLinearGradient(ctx, grad2, CGPointMake(0, 0), CGPointMake(320, 0), 0);
CGGradientRelease(grad1);
CGGradientRelease(grad2);
CGColorSpaceRelease(space);
}
¡Esta parece ser una buena solución! – Mrwolfy
Impresionante, esto es exactamente lo que necesitaba, ¡buen trabajo! –