anchorPoint et position CALayer
Hello,
C'est mon premier post .
Je suis entrain de lire le Core Animation programming guide. Je commence par comprendre les concepts de base de CALayer qui me semble super important pour comprendre la suite et ça bloque dèjas .
Mon problème est le fameux anchorPoint. Bon j'ai fais des recherches sur internet et essayer de comprendre plusieurs explications mais j'arrive pas. Enfin j'ai compris que toutes les opérations géométriques ( rotation, transformation,...) des UIView ( CALayer ) se basent sur ce fameux point mais je voudrais comprendre plus...J'ai l'impression que y a plus à comprendre
Dans la documentation, il disent que la position de CALayer et relié ( ou relative ) à l'anchorPoint. C'est quoi cette relation ? peut-on la formuler avec une formule simple (mathématique) ?
Bon je pense que je n'ai pas compris non plus la property position de CALayer . est-ce le centre de CALayer comme la property center de UIView ?
Est-ce que quelqu'un à une explication simple, peut être avec une explication en français ça ira mieux.
Pourquoi ce anchorPoint existe ?
Bon vous avez compris que je suis un peu perdu .
Merci,
Réponses
center de UIView c'est presque la même chose que position de CALayer. En tout cas c'est exactement la même chose lorsque l'anchorPoint de CALayer a sa valeur par défaut (0.5, 0.5).
anchorPoint nous donne simplement la capacité de :
- changer l'interprétation de la position, qui n'est plus seulement le centre comme dans UIView, mais qui peut être n'importe quel point, par exemple le coin en haut à gauche
- spécifier le point de référence d'une animation. C'est particulièrement important pour une rotation par exemple ; dire que la rotation est effectuée autour du centre ou autour de l'un des coins n'aura absolument pas le même effet visuel
Pour le dire autrement, l'anchor point correspond à une translation effectuée avant les autres transformations.
Salut,
Merci pour vos réponses.
J'avoue que j'ai toujours du mal à voir
La position et l'anchorPoint sont toujours le même point mais dans des référentiels différents ?
Et si on avait juste la position, ça n'aurais pas été suffisant ?
C'est difficile de t'expliquer si tu n'as pas d'expérience avec les matrices de transformations. Quand on applique une rotation à la matrice, celle-ci est effectuée par rapport à l'origine du repère (0, 0). Si tu veux que l'objet tourne autour de son centre, il faut:
- appliquer une translation de -x-width/2, -y-width/2
- appliquer la rotation
- appliquer une translation de x+width/2, y+width/2.
Avec l'anchor point, tu n'as pas à te soucier de tout cela: il permet de spécifier le centre de rotation par rapport au rectangle de la vue. Tu n'as qu'à changer la propriété 'rotation'.
Si anchorPoint = {0, 0}, la rotation se fait par rapport au coin supérieur gauche de la vue.
Si anchorPoint = {1, 1}, la rotation se fait par rapport au coin inférieur droit de la vue.
Essaie.
Merci.
Je vais creuser encore plus sur les matrices et les transformations du coté mathématique.
Je vais surement revenir vous embêter