2010-06-03 8 views
0

Y at-il un moyen de quitter drawRect: sans actualiser le courant UIView? Par exemple:Rollback drawRect:

- (void)drawRect:(CGRect)rect { 

CGContextRef context = UIGraphicsGetCurrentContext(); 

CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0); 
CGContextSetLineWidth(context, 2); 

CGContextMoveToPoint(context, 10.0, 30.0); 
CGContextAddLineToPoint(context, 310.0, 30.0); 
CGContextStrokePath(context); 


//I would like to return from here and rollback all changes in drawRect: 

} 

Merci!

+0

Non, vous ne pouvez pas. Si vous expliquez pourquoi vous voulez faire cela, peut-être que quelqu'un peut offrir une solution alternative. –

+0

C'est une application cartographique. Lorsque l'utilisateur déplace la carte, un nouveau thread (appelons ce thread1) commence à redessiner l'écran. Ensuite, l'utilisateur déplace à nouveau la carte et maintenant thread2 (le plus récent thread) doit redessiner la carte. Mais si le thread1 n'a pas terminé le dessin, l'écran va «animer» l'image du thread1 pendant un bref instant. Il est donc préférable de restaurer la méthode drawRect: du thread1 et de dessiner l'image de thread2. – fic

+1

Cela semble étrange. Vous ne pouvez pas redessiner l'écran plus de 50fps. Le temps passé à drawrect devrait être inférieur à 1/50ème de seconde pour que gui soit réactif. Si votre dessin prend plus de temps, il semble que vous ayez besoin de dessiner une texture dans un fil d'arrière-plan et quand cela est prêt, passez à l'écran dans drawrect (ce qui prendra beaucoup moins de 1/50ème de seconde). Votre question devient alors comment annuler le fil d'arrière-plan et en commencer un nouveau. – hooleyhoop

Répondre

0

Si vous n'avez pas commencé à dessiner dans le contexte, il peut être possible de revenir simplement de drawRect:. Vous devez définir la propriété clearsContextBeforeDrawing de la vue sur NO avant. Après avoir commencé à dessiner dans le contexte, la vue/couche mettra toujours à jour son contenu.

+0

Merci pour la réponse. – fic