Je sous-classe un UIView et écrase la méthode drawRect. Je remarque que le drawrect de la vue n'est appelé que lorsque la vue est chargée. Après cela, il n'est plus jamais appelé. Comment je m'assure qu'il est appelé après un changement d'orientation? J'ai essayé d'appeler setNeedsDisplay sur la vue avant et après la rotation et cela ne fonctionne pas.iPhone SDK: Comment déclencher drawRect sur UIView sous-classe après le changement d'orientation?
18
A
Répondre
57
[myView setContentMode:UIViewContentModeRedraw];
Vous pouvez le configurer dans IB ainsi (par exemple, le mode réglé sur "redessiner")
8
C'était un bug lié à quelque chose de complètement différent. En effet, setNeedsDisplay provoque l'appel de drawRect.
+0
Oui 'setNeedsDisplay:' déclenchera un redessin, mais nécessite que le programmeur l'invoque explicitement. 'setContentMode: 'déclenchera automagiquement un redessin lors d'un changement d'orientation. – wcochran
0
pour répondre à cela et les autres 94.000 similiar questions au sujet de vue rotation/drawRect funkiness,
-(id)initWithFrame:(CGRect)frame
{
if(self=[super initWithFrame:frame]) {
self.autoresizesSubviews=YES;
self.autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
}
return self;
}
C'est la manière préférée. – yuji
Voir la réponse de l'auteur original ci-dessous. setNeedsDisplay est en effet le bon appel de méthode. –
'setNeedsDisplay:' est utilisé lorsque vous souhaitez déclencher un rafraîchissement par programmation. Lorsque vous voulez que les changements d'orientation déclenchent un rafraîchissement, alors 'setContentMode:' est le ticket. – wcochran