2011-03-27 3 views
1

J'essaie de définir un arrière-plan dégradé sur une vue, mais mon code ci-dessous rend l'UIView noir fixe. Si je change la whiteColor en greenColor, le dégradé est affiché correctement. La modification de la propriété backgroundColor du calque en greenColor fait apparaître la vue en vert. Je pense que j'ai affaire à une sorte de problème de transparence, mais je n'arrive pas à me débrouiller pour contourner ce problème.CAGradientLayer en couleur unie

CAGradientLayer *gradientLayer = [CAGradientLayer layer]; 
gradientLayer.colors = [NSArray arrayWithObjects: 
            (id)[[UIColor whiteColor] CGColor], 
            (id)[[UIColor blackColor] CGColor], nil]; 
gradientLayer.frame = CGRectMake(0, 0, 1, someView.frame.size.height); 

UIGraphicsBeginImageContext(CGSizeMake(1, someView.frame.size.height)); 
[gradientLayer renderInContext: UIGraphicsGetCurrentContext()]; 

UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 

someView.backgroundColor = [UIColor colorWithPatternImage: image]; 

Répondre

7

Vos couleurs blanches et noires sont dans l'espace colorimétrique en niveaux de gris. Essayez de les rendre en RGB colorspace:

gradientLayer.colors = [NSArray arrayWithObjects: 
          (id)[UIColor colorWithRed:0 green:0 blue:0 alpha:1].CGColor, 
          (id)[UIColor colorWithRed:1 green:1 blue:1 alpha:1].CGColor, nil]; 

Cela devrait résoudre votre problème, mais je ne suis pas sûr de la mécanique de quartz ce derrières.

Questions connexes