2012-07-14 10 views
10

Estoy planeando crear un degradado de cuatro puntos, representado en la imagen siguiente, dibujando dos degradados lineales mediante gráficos centrales y enmascarando entre ellos con un tercer degradado lineal en blanco y negro.Gradiente de cuatro puntos en iOS

¿Existe alguna manera más eficiente de dibujar un degradado de cuatro puntos utilizando gráficos centrales, u otros?

enter image description here

Respuesta

4

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); 
} 
+0

¡Esta parece ser una buena solución! – Mrwolfy

+0

Impresionante, esto es exactamente lo que necesitaba, ¡buen trabajo! –

9

sacar cuatro círculos:

Circles

Aplicar radial gradiente transparente:

Gradient

Resultado:

Result

Notas:

  • Las líneas grises representan el tamaño de mapa de bits.
  • El diámetro de los círculos es dos veces el diámetro del mapa de bits.
  • Cada círculo está centrado en una de las esquinas del mapa de bits.
  • Efectivamente solo se dibuja la parte central.
  • Las partes restantes están fuera del mapa de bits.
+0

listo, gracias. – Mrwolfy

Cuestiones relacionadas