J'appelle setNeedsDisplayInRect d'une fonction NSTimer toutes les deux secondes. Cela fonctionne parfaitement, et dessine un carré dans une position aléatoire, avec une couleur aléatoire. Cependant, dans certaines circonstances je voudrais dessiner un carré x nombre de fois dans la fonction NSTimer (en utilisant une boucle for) - mais après de nombreux tests d'erreur, il semble que drawRect ne soit appelé qu'une seule fois même si je cours setNeedsDisplayInRect x fois? J'aimerais beaucoup de l'aide que j'ai essayé de comprendre ce problème toute la journée. Carl.iPhone: drawRect appelé une fois
Modifier ci-dessous est mon code ...
Voir
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 2.0);
CGContextSetStrokeColorWithColor(context, currentColor.CGColor);
CGContextSetFillColorWithColor(context, currentColor.CGColor);
CGContextAddRect(context, redrawRect);
CGContextDrawPath(context, kCGPathFillStroke);
}
-(void)drawInitializer
{
int x = (int)arc4random() % [self.xCoordinates count];
int y = (int)arc4random() % [self.yCoordinates count];
self.currentColor = [UIColor randomColor];
self.redrawRect = CGRectMake ([[self.xCoordinates objectAtIndex:x] intValue], [[self.yCoordinates objectAtIndex:y] intValue], 25, 25);
[self setNeedsDisplayInRect:redrawRect];
}
Contrôleur
- (void) handleTimer: (NSTimer *) timer
{
for(int i=0; i<5; i++)
{
[self.squareView drawInitializer];
}
}
il n'est pas redessiné avant le prochain passage dans la boucle d'exécution. – Wevah
Wevah est correct. Vous appelez -setNeedsDisplayInRect: cinq fois dans une boucle serrée, mais le redessin ne se produira pas tant que vous n'aurez pas atteint la fin de la boucle d'exécution. –