Une rotation d'angle a autour du point (x,y) correspond à la transformation affine :
CGAffineTransform transform = CGAffineTransformMake(cos(a),sin(a),-sin(a),cos(a),x-x*cos(a)+y*sin(a),y-x*sin(a)-y*cos(a));
Il se peut que vous deviez insérer -a au lieu de a, selon que vous souhaitez que la rotation se fasse dans le sens des aiguilles d'une montre ou dans le sens inverse. De même, vous devrez peut-être saisir -y au lieu de y selon que votre système de coordonnées est à l'envers ou non.
De plus, vous pouvez accomplir exactement la même chose en trois lignes de code en utilisant :
CGAffineTransform transform = CGAffineTransformMakeTranslation(x, y);
transform = CGAffineTransformRotate(transform, a);
transform = CGAffineTransformTranslate(transform,-x,-y);
Si vous l'appliquiez à une vue, vous pourriez aussi simplement utiliser une transformation de rotation via CGAffineTransformMakeRotation(a), à condition de définir la propriété anchorPoint du calque de la vue pour refléter le point autour duquel vous souhaitez effectuer la rotation. Cependant, il semble que vous ne soyez pas intéressé par l'application de cette méthode à une vue.
Enfin, si vous appliquez cette transformation à un espace 2D non euclidien, il se peut que vous ne souhaitiez pas du tout une transformation affine. Les transformations affines sont des isométries de l'espace euclidien, ce qui signifie qu'elles préservent la distance euclidienne standard, ainsi que les angles. Si votre espace n'est pas euclidien, alors la transformation que vous voulez peut ne pas être affine, ou si elle l'est, la matrice pour la rotation peut ne pas être aussi simple que ce que j'ai écrit ci-dessus avec sin et cos. Par exemple, si vous êtes dans un espace hyperbolique, vous devrez peut-être utiliser les fonctions trigonométriques hyperboliques sinh et cosh, ainsi que des signes + et - différents dans la formule.
P.S. Je voulais aussi rappeler à tous ceux qui ont lu jusqu'ici que "affine" se prononce avec un "a" court comme dans "ask", et non un "a" long comme dans "able". J'ai même entendu des employés d'Apple le prononcer de façon erronée lors de leurs interventions à la WWDC.