2010-05-04 2 views
18

Comment appeler drawRect par programmation dans l'objectif c?Comment appeler drawRect par programme dans l'objectif c

Je veux appeler la méthode drawrect d'une vue dans mon contrôleur UItabbarcontroller. Comment puis-je faire ceci ? Merci d'avance ..

Modifier

Je dois appeler lorsque la vue n'est pas visible. Ce sera la première fois que je dois appeler ce point de vue

+4

Pourquoi voudriez-vous en tirer une vue sans mettre réellement à l'écran? De plus, vous ne devriez jamais appeler 'drawRect:' directement (sauf pour 'super'). – bddckr

+0

Supposons que je ne sélectionne pas l'onglet Premier, après le lancement de l'application. De la deuxième sélection de l'onglet je veux montrer le premier onglet avec les changements de contenu. Le changement de contenu signifie que je dois changer le champ UIText etc. Maintenant, ce qui se passe est la première fois que le champ de texte de mon onglet sélectionné ne change pas. Mais si je sélectionne à nouveau ça va changer. –

Répondre

35
[myView.layer display]; 

Forces en vue de se tirer immédiatement.

[myView setNeedsDisplay: YES]; 

Force la vue à redessiner lors du cycle de boucle d'événement suivant. Cependant, si vous devez l'appeler même s'il n'est pas visible, je pense qu'il y a un problème avec la conception de votre classe de vue. Vous ne devriez dessiner qu'à l'intérieur de drawRect: rien d'autre. Et si vous ne faites que dessiner, pourquoi le faire quand la vue n'est pas visible?

+0

Il y a un cas où vous voulez le rendre hors écran, et c'est quand vous avez l'intention d'utiliser le contenu de la vue (par exemple prendre une capture d'écran, etc.) et le mettre en cache ailleurs. Dans mon cas, je veux prendre une capture d'écran d'une vue qui n'est pas nécessairement vue par l'utilisateur et enregistrer l'image de cette vue sur le disque. – Kalle

+2

Je ne suis pas sûr de comprendre cette solution. 'UIView' n'a pas de méthode' display'. –

+2

Je suis aussi confus pour la même raison ... –

4
+0

Merci pour votre réponse. Mais setNeedsDisplay n'appellera que si la vue est visible. Dans ma condition, la vue ne sera pas visible. Pardon. Ma question était trompeuse. J'ai édité ma question –

0

view.layer.renderInContext(context: CGContext) peut dessiner le contenu de votre vue dans un CGContext, par ex. un bitmap.

view.snapshotViewAfterScreenUpdates(afterUpdates: Bool) vous donne un aperçu de la vue.

1

Swift:

yourView.setNeedsDisplay() 

ou

yourView.setNeedsDisplay(newRect) 
Questions connexes