Comment tourné dingue avec drawRect: dans une UIView
Greensource
Membre
Bonjour bonjour.
Alors petit bug du jour incompréhensible:
J'ai une vue (UIView) à qui je veux mettre un background color. Cette couleur je la récupère d'un objet Player. Voici le code:
Et voici ce que me dit la console:
Donc à priori pas de souci, mon background color doit-être orange, n'est-ce pas?
Or il est irrésistiblement noir! Pourtant nul par ailleurs je lui dit de se mettre en noir!
Perdu le Greensource, qu'il est... ???
Alors petit bug du jour incompréhensible:
J'ai une vue (UIView) à qui je veux mettre un background color. Cette couleur je la récupère d'un objet Player. Voici le code:
<br />- (void)drawRect:(CGRect)rect {<br /> NSLog(@"couleur du joueur:%@",[myController colorOfCurrentPlayer]);<br /> NSLog(@"couleur orange:%@",[UIColor orangeColor]);<br /> [self setBackgroundColor:[myController colorOfCurrentPlayer]];<br /> [labelInfo setTextAlignment:UITextAlignmentCenter];<br />}
Et voici ce que me dit la console:
2009-03-21 11:25:04.155 GreenWar[58863:20b] couleur du joueur:UIDeviceRGBColorSpace 1 0.5 0 1
2009-03-21 11:25:04.156 GreenWar[58863:20b] couleur orange:UIDeviceRGBColorSpace 1 0.5 0 1
Donc à priori pas de souci, mon background color doit-être orange, n'est-ce pas?
Or il est irrésistiblement noir! Pourtant nul par ailleurs je lui dit de se mettre en noir!
Perdu le Greensource, qu'il est... ???
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Ainsi il faut changer la couleur de fond ailleurs que dans drawRect:
En effet je sais pas bien comment a atterri [labelInfo setTextAlignment:UITextAlignmentCenter]; ici, merci de la remarque.
Sinon, mon souci provenais du fait que je faisait un appel à setNeedsDisplay dans le constructeur de l'Objet (Board) qui contient currentPlayer. Du coup au moment on faisait cherchais la valeur de currentPlayer et bien l'Objet (Board) qui dois le contenir n'existait pas encore! :P
Pour reprendre ce que tu disais au sujet du "Painter's Model", c'est un model à suivre selon l'architecture Cocoa c'est bien ça? Mais du coup si on fait, avant drawRect:, les modifs de dessin, que reste t'il à faire dans drawRect:? Moi il se retrouve tout vide le pauvre :P
Le "Painter's Model" signifie que le processus de dessin rajoute des couches au fur et à mesure.
Le backgroundColor remplit ta vue d'orange avant l'appel de drawRect:
Dans drawRect, si tu rajoute un cercle bleu, l'orange "disparaà®t" sous le bleu.
rq : sous Cocoa, il n'y a pas de property backGroundColor , et on est souvent amené à définir une variable backgroundColor , et à faire un [backgroundColor set];NSRectFill(rect); pour obtenir le même effet.