2011-05-10 15 views
8

Tengo dos instancias de UIColor y quiero usarlas para crear un degradado. El código funciona, pero me da una advertencia cuando llamo al arrayWithObject: constructor:Cómo uso cómodamente CGColor en un NSArray con CGGradient

advertencia: cuestión semántica: incompatibles tipos de puntero que envían 'CGColorRef' (también conocido como 'struct CGColor *') al parámetro de tipo 'id'

Sospecho que hay otros problemas relacionados con la advertencia (fugas, por ejemplo). Aquí está el fragmento:

UIColor *startColor, *endColor; 
    // ... 
    NSArray *colors = [NSArray arrayWithObjects: 
         startColor.CGColor, endColor.CGColor, nil]; 
    CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, 
        (CFArrayRef) colors, NULL); 

¿Cómo puedo volver a escribir el código para deshacerse de esta advertencia de una manera segura?

  • Intenté crear un CGArrayRef manualmente, pero eso se volvió un poco desagradable después de un tiempo.
  • CGGradientCreateWithColorComponents obras, pero no me gusta tener que combinar manualmente todos los componentes de color en un CGFloat components[]
+0

¿Se puede hacer uso de 'CAGradientLayer * gradiente = [capa CAGradientLayer] ; gradient.frame = view.bounds; gradient.colors = [NSArray arrayWithObjects: (id) [[UIColor blackColor] CGColor], (id) [[UIColor whiteColor] CGColor], nil]; ' – visakh7

+0

@ 7KV7, no lo creo. Lo uso en drawRect para crear mi forma completa (que es un polígono no rectangular por cierto). –

+0

También UIColor * startColor, endColor; debería ser UIColor * startColor, * endColor; – visakh7

Respuesta

24

probar este

UIColor *startColor, *endColor; 
    // ... 
    NSArray *colors = [NSArray arrayWithObjects: 
         (id)startColor.CGColor, (id)endColor.CGColor, nil]; 
    CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, 
        (CFArrayRef) colors, NULL); 
+0

Esto eliminará la advertencia – visakh7

Cuestiones relacionadas