[Résolu] méthode drawRect

tethystethys Membre
janvier 2012 modifié dans API AppKit #1
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 ?

Réponses

  • CéroceCéroce Membre, Modérateur
    05:25 modifié #2
    dans 1327098859:

    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 ?

    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.
    dans 1327098859:

    est-ce que ça ne risque pas de ralentir si j'en dessine plusieurs dizaines ?

    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.

    dans 1327098859:

    peut-on dessiner sur un calque ?

    Oui. Regarde du côté de CGLayer.

    dans 1327098859:

    peut-on utiliser un CALayer au lieu d'une NSView ?

    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.
  • tethystethys Membre
    05:25 modifié #3
    merci pour tes réponses toujours aussi utiles, Céroce :)
Connectez-vous ou Inscrivez-vous pour répondre.