2011-07-05 1 views
2

J'ai besoin de dessiner sur mon uiview sans utiliser la méthode drawrect mais je ne sais pas comment obtenir le contexte graphique dynamiquement à tout moment? Par exemple: Je dois ajouter une ligne lorsque l'utilisateur a sélectionné la ligne d'ajout à partir de pop-up dans ma barre d'outils.Obtenir le contexte de UIView sans utiliser drawrect Méthode

Répondre

5

Cela ne peut pas être fait. Vous devrez avoir une sorte de marqueur pour indiquer une nouvelle ligne, puis appeler la méthode setNeedsDisplay pour qu'elle appelle la méthode drawRect:. Vous pouvez rechercher le marqueur dans la méthode drawRect: et tracer la ligne en conséquence.

Vous devrez sauvegarder l'état. Probablement un tableau de lignes ajouté afin que vous puissiez l'utiliser pour dessiner la vue lorsque la méthode drawRect: est invoquée.

Une alternative

Vous pouvez utiliser une vue d'image à cet effet. Vous pouvez le faire,

UIGraphicsBeginImageContext(imageView.frame.size); 
[imageView.image drawInRect:CGRectMake(0, 0, imageView.frame.size.width, imageView.frame.size.height)]; 
/* Draw line here */ 
imageView.image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

De cette façon, vous n'aurez pas l'état mais vous ajoutez simplement la ligne à l'image.

+0

Merci beaucoup :) Ça m'a beaucoup aidé :) –

2

Votre vue a aucun contexte graphique en dehors de drawRect:. Vous ne pouvez pas effectuer d'appels de dessin arbitraires en dehors de drawRect: et les laisser persister. Si vous devez ajouter dynamiquement des lignes, etc. à une vue, vous devez d'abord stocker les lignes dans un tableau ou une autre structure, puis itérer cette structure à drawRect: et dessiner chaque élément.

Vous pouvez également créer une vue personnalisée (ou une couche) sur chaque ligne et l'ajouter en tant que sous-vue.