2011-06-05 1 views
0

J'essaie de sauvegarder un contexte graphique et de l'afficher à côté de nouveaux dessins ajoutés. Ça ne fonctionne pas pour moi.Enregistrer le contexte graphique dans NSGraphicsContext afin de redessiner le contenu de la vue

Je fais cela dans une boucle pour dessiner les noms sur une coutume NSView:

- (void)drawNamesQuarterFinals{ 

    self.drawStringWithAttributes = [self stringAttributes:0]; 


    if ([self.arrayWithQuarterFinals count] > 4) 
    { 
     for (int i = 0;i < 8;i++){ 
      self.stringToDraw = [NSString stringWithFormat:@"%@", [self.arrayWithQuarterFinals objectAtIndex:i]]; 
      self.whereToDrawString = [self namePositions:i rowNumber:0]; 
      [self setNeedsDisplay:YES]; 

     } 

    } 

} 

Ceci est ma méthode drawRect::

- (void)drawRect:(NSRect)dirtyRect 
{ 

    NSGraphicsContext *currentContext = [NSGraphicsContext currentContext]; 

    [self drawPlayField]; 

    [self.stringToDraw drawAtPoint:self.whereToDrawString withAttributes:self.drawStringWithAttributes]; 
    [NSGraphicsContext saveGraphicsState]; 

    [currentContext restoreGraphicsState]; 
} 

Comme vous pouvez le voir, j'utiliser une boucle pour dessiner tous les noms, mais seul le nom de famille est affiché dans le NSView. Les autres sont écrasés chaque fois que drawRect: est appelée.

Ma question: Comment puis-je empêcher cela? Comme vous pouvez le voir, j'ai essayé d'ajouter un NSGraphicsContext où je veux enregistrer mon contexte pour le redessiner, mais cela ne fonctionne pas. Je pourrais être loin. Pointez-moi dans la bonne direction s'il vous plaît!

Répondre

0

setNeedsDisplay: indique que la vue est sale et qu'elle doit être redessinée. Cela arrive à chaque boucle d'exécution. Ainsi, il n'est appelé qu'une seule fois après la fin de la boucle et par conséquent, les dernières valeurs stockées de whereToDrawString et stringToDraw sont utilisées. L'approche correcte consiste à marquer la vue comme sale lorsque [self.arrayWithQuarterFinals count] > 4, puis en boucle le tableau arrayWithQuarterFinals à l'intérieur du drawRect: et dessiner les chaînes en conséquence.

Questions connexes