2010-12-02 4 views
1

J'ai cet UIView que j'ai sous-classé et mis en œuvre ma propre méthode drawRect.iPhone - nettoyer le contexte d'un UIView drawRect extérieur

Lorsque la méthode drawRect exécute la première fois, je prends le contexte dans une variable en utilisant

ctx = UIGraphicsGetCurrentContext(); 

plus tard le code, en dehors drawRect, je suis en train de nettoyer l'ensemble du contexte le remplir avec une couleur transparente , alors que je fais:

CGContextClearRect(ctx, self.bounds); 
[self setNeedsDisplay]; 

le problème est que le contexte ne sont pas effacées et continue comme avant.

À ce stade, ctx n'est pas nul.

Ai-je raté quelque chose?

grâce

Répondre

4

est-il pas possible de déplacer la compensation en drawRect? Je ne suis pas sûr si le dessin de drawRect est possible, et même si c'est le cas, ce n'est pas exactement comme ça que ça fonctionne.

+0

c'est tout. Merci! – SpaceDog

0

Ce n'est pas beaucoup code provice, mais avez-vous essayé de conserver le contexte?

CGContextRetain(ctx)

+0

merci. Comme je l'ai dit, ctx est valide quand je l'ai effacé, mais j'essaie d'ajouter la ligne que vous avez suggérée et ça continue à ne rien effacer. – SpaceDog

2

Que pensez-vous de cela?

[[UIColor clear] set]; ///< set clear color for stroke & fill 
CGContextFillRect(ctx, self.bounds); 

Et, le CTX de CGContextGetCurrentContext() est uniquement valable dans le drawRect :, ou entre UIGraphicesPushContext() et UIGraphicsPopContext(), ou UIGraphcisBeginImageContext() et UIGraphicsEndImageContext().

0

De cette façon fonctionne plus vite alors CGContextFillRect:

-(void) drawRect:(CGRect)rect{ 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    CGContextClearRect(ctx, rect); 
} 
Questions connexes