41 votes

Comment remplir un chemin avec gradient dans drawRect:?

le remplissage d'un chemin avec une couleur unie est assez facile:

CGPoint aPoint;
for (id pointValue in points)
{
    aPoint = [pointValue CGPointValue];
    CGContextAddLineToPoint(context, aPoint.x, aPoint.y);
}
[[UIColor redColor] setFill];
[[UIColor blackColor] setStroke];
CGContextDrawPath(context, kCGPathFillStroke);

Je voudrais attirer un dégradé au lieu de rouge, mais je vais avoir des ennuis. J'ai essayé le code figurant dans la Question/Réponse: http://stackoverflow.com/questions/422066/gradients-on-uiview-and-uilabels-on-iphone

qui est:

CAGradientLayer *gradient = [CAGradientLayer layer];
[gradient setFrame:rect];
[gradient setColors:[NSArray arrayWithObjects:(id)[[UIColor blueColor] CGColor],
                (id)[[UIColor whiteColor] CGColor], nil]];
[[self layer] setMasksToBounds:YES];

[[self layer] insertSublayer:gradient atIndex:0];

Cependant, cette brosse la totalité de la vue que c'est avec le dégradé, la couverture de mon chemin d'origine.

97voto

sbooth Points 9275

Je voudrais clip à la voie que vous voulez remplir, et utiliser CGContextDrawLinearGradient. Voici une simple implémentation de drawRect: à titre d'exemple:

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X