2010-04-01 4 views
4

Est-il possible de dessiner un dégradé dans un chemin sur l'iPhone?CGGradient dans un CGPath

Je suis à la recherche d'un remplacement du mac os x méthode

-(void)drawInBezierPath:(NSBezierPath *)path relativeCenterPosition:(NSPoint)relativeCenterPosition of NSGradient. 

Répondre

12

Je pense que quelque chose comme cela fonctionnera:

CGContextSaveGState(c); 
CGContextAddPath(c, path); 
CGContextClip(c) 

// make a gradient 
CGColorRef colors[] = { topColor, bottomColor }; 
CFArrayRef colorsArr = CFArrayCreate(NULL, (const void**)colors, sizeof(colors)/sizeof(CGColorRef), &kCFTypeArrayCallBacks); 

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, colorsArr, NULL); 
CFRelease(colorSpace); 
CFRelease(colorsArr); 

// Draw a linear gradient from top to bottom 
CGPoint start = ... 
CGPoint end = ... 
CGContextDrawLinearGradient(c, gradient, start, end, 0); 

CFRelease(gradient); 
CGContextRestoreGState(c); 
+0

Thx beaucoup Todd! J'ai déjà eu le même code, mais j'ai oublié le CGContextClip après le CGContextAddPath .... – catlan

+0

J'essaie de comprendre ce code mais "couleurs" est déclaré deux fois avec des types différents. Je ne suis pas sûr de savoir lequel était utilisé dans les appels subséquents. – progrmr

+0

progrmr, sa typo, devrait être: CGColorRef colorRef [] = {topColor, bottomColor}; CFArrayRef colors = CFArrayCreate (NULL, (const vide **) colorRef, sizeof (colorRef)/sizeof (CGColorRef), & kCFTypeArrayCallBacks); – digdog

1

Oui, je pense que si je comprends bien votre question. Il est un peu en cause, mais ici est un bon exemple de le faire:

http://cocoawithlove.com/2008/09/drawing-gloss-gradients-in-coregraphics.html

Cela se fait avec Cocoa et non Cocoa Touch, mais il traduit avec tout bu NSColor. Vous devez utiliser UIColor à la place. Fondamentalement, vous devez créer une fonction de dégradé, puis utiliser:

CGShadingCreateAxial() 

pour déterminer la valeur de votre dégradé.

Ou voulez-vous avoir une ligne avec un dégradé?

Questions connexes