Conseils pour bosser avec CATransform3D
Bonjour !
Je cherche à faire quelque chose qui a l'air délicat avec CATransform3D et avant de me lancer dans la doc et dans les calculs :
Connaissez-vous des librairies utiles pour travailler avec CATransform3D ?
A priori, si ce que je cherche n'existe pas, je vais avoir besoin de composer des CATransform3D. Ce n'est pas compliquer à coder, mais si c'est déjà fait...
*************************
Mon problème est le suivant :
Je veux appliquer à ma vue une transfo T dont je connais l'expression si le anchorPoint est (a,b). Mais, je n'ai pas la possibilité de changer le anchorPoint de ma vue ! (cf. la question du SO)
En effet, la transfo va être appliquée par le framework UICollectionView, elle va être stockée dans des UICollectionViewLayoutAttributes et il n'y a pas de @property anchorPoint...
La piste que je vois pour l'instant est d'exprimer T dans le anchorPoint (1/2, 1/2). J'ai un peu googleisé mais pas de trace d'une fonction qui ferait ça. À mon avis, il suffit d'appliquer un changement de repère.
Une autre piste serait de sous-classer UICollectionViewLayoutAttributes ...
**************
Merci si vous avez des remarques ou conseils !
Réponses
Tu appliques une CATransform3D de translation d'abord, qui va faire une translation de ton point (0.5, 0.5) vers ton point [tt](a, [/tt], puis ta transformation T, puis une CATransformation de translation dans l'autre sens pour ramener ton point [tt](a, [/tt] en (0.5, 0.5).
Bon faut juste pas se gourrer dans l'ordre d'application des transformations (en général c'est souvent l'ordre inverse de celui qui nous vient de prime abord ).
Il doit trainer tout plein d'explications et de schemas dans les Programming Guide Apple sur le sujet je pense.
Oui tu as raison, je cherchais une fonction qui compose deux transformations quelconques, mais ici il suffit de composer par des translations. (YAGNI......)
Pour le sens, c'est généralement PTP^-1 qui est la bonne écriture. Ici avec P qui translate 0.5,0.5 vers a,b on voit que ca marche en constatant que a,b est bien invariant si T est une rotation ;-)
ça y est ! je pense que j'ai réussi !
En fait, il existe une commande pour faire le produit de transformations, c'est CATransform3DConcat ! Dans un premier temps, ça ne marchait pas. Attention piège : si on veut appliquer la transfo T.T' il faut faire CATransform3DConcat( T',T) !!!!
Oui une fois que je m'en suis rendu compte, j'ai mieux compris ton message.