2010-11-13 4 views
0

J'ai le code dans mon application iPhone pour dessiner un graphique à secteurs dans un UIView. Tout est génial, mais je dois être capable d'utiliser une texture ressemblant à de la craie pour tracer les contours et ensuite remplir les différentes couleurs du camembert.Dessiner des lignes et des remplissages avec une texture de craie dans l'application iPhone

Voici des extraits du code existant pour chaque zone:

Dessin du cercle autour du diagramme circulaire:

CGContextRef ctx = UIGraphicsGetCurrentContext(); 

CGContextSetRGBStrokeColor(ctx, 1.0, 1.0, 1.0, 1.0); 
CGContextSetLineWidth(ctx, 8.0); 

// Draw a thin line around the circle 
CGContextAddArc(ctx, x, y, r, 0.0, 360.0*M_PI/180.0, 0); 
CGContextClosePath(ctx); 
CGContextDrawPath(ctx, kCGPathStroke); 

... et en dessinant un segment de la tarte:

CGContextSetRGBStrokeColor(ctx, 1.0, 1.0, 1.0, 1.0); 
      CGContextSetLineWidth(ctx, 8.0); 
      CGContextMoveToPoint(ctx, x, y); 
      CGContextAddArc(ctx, x, y, r, (startDeg-90)*M_PI/180.0, (endDeg-90)*M_PI/180.0, 0); 
      CGContextClosePath(ctx); 
      CGContextDrawPath(ctx, kCGPathStroke); 

... puis en le remplissant avec un remplissage de couleur:

CGContextSetRGBFillColor(ctx, color.red, color.green, color.blue, color.alpha); 
      CGContextMoveToPoint(ctx, x, y); 
      CGContextAddArc(ctx, x, y, r, (startDeg-90)*M_PI/180.0, (endDeg-90)*M_PI/180.0, 0); 
      CGContextClosePath(ctx); 
      CGContextFillPath(ctx); 

En ignorant le fait que je n'ai pas collé dans les déclarations de variables pour la plupart des variables utilisées, j'espère que le code est assez explicite.

Maintenant: Comment est-ce que je pourrais changer le code pour utiliser une texture pour le dessin réel des lignes/arcs?

De même, comment puis-je utiliser un remplissage de texture au lieu d'un remplissage de couleur? J'essaie d'obtenir cette application terminée et c'est ma dernière pierre d'achoppement. D'autres questions sur SO et ailleurs sur le web ne semblent pas répondre à la question d'une manière que je peux suivre.

Toute aide sera grandement appréciée!

Robert

Répondre

4

sais que c'est pas à jour, mais on peut remplir ou modèles institué de temps à l'aide de ce simple extrait de code:

// Somewhere in initialization code. 
    UIColor *pattern = [UIColor colorWithPatternImage:[UIImage imageNamed:@"pattern.png"]]; 
    CGColorRef fillColor = [pattern CGColor]; 
    CGColorRef strokeColor = [pattern CGColor]; 

    // Probably in |draw| method call. 
    CGContextSetStrokeColorWithColor(context, strokeColor); 
    CGContextSetFillColorWithColor(context, fillColor); 

espère que cela aidera quelqu'un. Il existe également d'autres grandes possibilités avancées: vous pouvez manipuler les motifs de plusieurs façons: déplacer, mettre à l'échelle, faire pivoter, utiliser des motifs de couleur ou de pochoir et bien d'autres, mais cela nécessite de creuser profondément dans les api docs.

Questions connexes