Comment tourné dingue avec drawRect: dans une UIView

GreensourceGreensource Membre
00:26 modifié dans API UIKit #1
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:
<br />- (void)drawRect:(CGRect)rect {<br />	NSLog(@&quot;couleur du joueur:%@&quot;,[myController colorOfCurrentPlayer]);<br />	NSLog(@&quot;couleur orange:%@&quot;,[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... ???

Réponses

  • Philippe49Philippe49 Membre
    mars 2009 modifié #2
    A priori les dessins sont fait par le principe du "Painter's Model". Le fond est dessiné avant l'appel drawRect:
    Ainsi il faut changer la couleur de fond ailleurs que dans drawRect:
  • Philippe49Philippe49 Membre
    00:26 modifié #3
    Par ailleurs je ne vois pas ce que [labelInfo setTextAlignment:UITextAlignmentCenter]; fait dans une méthode drawRect: . C'est à  l'UIViewController de s'occuper de ce genre de chose.
  • GreensourceGreensource Membre
    00:26 modifié #4
    Bien je te remercie philippe.
    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
  • Philippe49Philippe49 Membre
    mars 2009 modifié #5
    dans 1237639393:

    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.
Connectez-vous ou Inscrivez-vous pour répondre.