Je suis relativement nouveau sur Objective-C + Quartz et je suis confronté à ce qui est probablement un problème très simple. J'ai une sous-classe personnalisée UIView que j'utilise pour dessiner des rectangles simples via Quartz. Cependant j'essaye de raccorder un NSTimer afin qu'il dessine un nouvel objet chaque seconde, le code ci-dessous dessinera le premier rectangle mais ne dessinera jamais plus. La fonction est appelée (le NSLog est exécuté) mais rien n'est dessiné.Utilisation de Quartz pour dessiner toutes les secondes via NSTimer (iPhone)
code:
- (void)drawRect:(CGRect)rect {
context = UIGraphicsGetCurrentContext();
[self step:self];
[NSTimer scheduledTimerWithTimeInterval:(NSTimeInterval)(2) target:self selector:@selector(step:) userInfo:nil repeats:TRUE];
}
- (void) step:(id) sender {
static double trans = 0.5f;
CGContextSetRGBFillColor(context, 1, 0, 0, trans);
CGContextAddRect(context, CGRectMake(10, 10, 10, 10));
CGContextFillPath(context);
NSLog(@"Trans: %f", trans);
trans += 0.01;
}
contexte est dans mon fichier d'interface:
CGContextRef context;
Toute aide sera grandement appréciée!
Exactement raison. Planifiez la minuterie répétée dans votre méthode 'viewDidLoad', et ayez votre méthode' update' appelée 'setNeedsDisplay'. Vous ne devez pas exécuter de code de dessin en dehors d'une méthode 'drawRect', sauf si vous avez préalablement défini un contexte de dessin. Utiliser celui d'un précédent appel à 'drawRect' ne fonctionnera pas, puisque ce contexte ne sera plus là après que' drawRect' aura fini. –