[Résolu] méthode drawRect
tethys
Membre
Bonjour,
je dessine dans ma vue avec la méthode drawRect,
je m'aperçois que si je redessine une deuxième fois, mon premier dessin n'apparait plus,
il faut donc que je le redessine à chaque fois même s'il est dans une partie différente de la vue ?
est-ce que ça ne risque pas de ralentir si j'en dessine plusieurs dizaines ?
peut-on dessiner sur un calque ?
peut-on utiliser un CALayer au lieu d'une NSView ?
je dessine dans ma vue avec la méthode drawRect,
je m'aperçois que si je redessine une deuxième fois, mon premier dessin n'apparait plus,
il faut donc que je le redessine à chaque fois même s'il est dans une partie différente de la vue ?
est-ce que ça ne risque pas de ralentir si j'en dessine plusieurs dizaines ?
peut-on dessiner sur un calque ?
peut-on utiliser un CALayer au lieu d'une NSView ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Non. La méthode a un argument qui est le rectangle à rafraichir.
Il existe deux méthodes pour demander à une vue de se redessiner:
- setNeedsDisplay:
- setNeedsDisplayInRect:
On passe ici le rectangle qui est "sale". Si on appelle plusieurs fois cette méthode, drawRect: sera appelée avec un rectangle englobant tous les rectangles sales.
Si. Mais souvent il est complexe de déterminer quelle partie redessiner, alors que le gain de performances en limitant le dessin est faible (parce que les zones à redessiner sont souvent grandes). Bref, comme d'habitude, d'abord on met au point, ensuite on mesure la vitesse et enfin on optimise en ciblant les gros gains potentiels.
Oui. Regarde du côté de CGLayer.
Oui. Contrairement à iOS, une CALayer n'est pas automatiquement associée à chaque vue, mais tu peux l'activer grâce à setWantsLayer:.
Note que le lissage des sous-pixels n'est pas actif sur une CGLayer/CALayer, ce qui se traduit essentiellement par des textes moins beaux.