Conseil Quartz 2D

Bonjour à  tous,

 

Je débute avec Quartz 2D ce matin j'ai eu un peu de mal, mais maintenant j'y vois un peu plus clair, j'ai cependant une question.

 

Quelle est la différence (question performance et/ou bonne pratique) entre : 

 



CGContextSaveGState(context);
for (int i=0; i< 7; i++)
{
CGContextDrawLayerAtPoint (context, CGPointZero, stripeLayer);
CGContextTranslateCTM (context, 0.0, spacing);
}
CGContextRestoreGState(context);


et celui-là  :

 



for (int i=0; i< 7; i++)
{
CGPoint coord = CGPointMake(0, spacing * i);
CGContextDrawLayerAtPoint(context,coord, stripeLayer);
}


La différence notable est la présence (ou non) de la sauvegarde et de la restauration du context. 

 

 

Merci pour votre aide :)


Réponses

  • CéroceCéroce Membre, Modérateur
    mai 2014 modifié #3
    Comme il est indiqué dans la doc, la sauvegarde du Gstate est une opération relativement lourde, parce que de nombreux paramètres sont sauvegardés.
    Note: ce n'est pas clairement dit dans la doc, mais une restauration du contexte est effectuée après l'exécution de -drawRect:.

    Il y a une autre raison à  préférer la seconde méthode: en général, il est plus facile de déboguer des coordonnées absolues que relatives.
  • PyrohPyroh Membre


    Note: ce n'est pas clairement dit dans la doc, mais une restauration du contexte est effectuée après l'exécution de -drawRect:.




     


    Donc une save avant l'appel ?  Sur OSX aussi ? T'as une source là  dessus ? 


    (non je ne suis pas inquisiteur )

  • CéroceCéroce Membre, Modérateur

    T'as une source là  dessus ?

    Non, mais je le dis d'expérience. Par exemple, je fixe une NSShadow, et elle n'apparaà®t pas dans les autres vues.
    En fait, c'est implicite, tu imagines le souk qu'on pourrait mettre autrement, juste parce qu'on a oublié de remettre comme c'était ;-)
Connectez-vous ou Inscrivez-vous pour répondre.