2 votes

CGContextConcatCTM vs CALayer affineTransform

J'essaie de modifier la transformation affine d'un CALayer pour que ce qui y est dessiné soit déformé.

J'ai d'abord fait cela sans CALayers, en redessinant simplement avec une CGAffineTransform différente passée à CGContextConcactCTM.

Cela a fonctionné, mais ce n'était pas assez rapide, alors j'ai décidé de le faire avec CALayer pour qu'il ne soit pas redessiné à chaque fois. Il sera juste transformé.

Le problème est que le fait de définir myLayer.affineTransform = myTransform ; ne semble pas avoir le même effet que de redessiner avec CGContextConcatCTM(myTransform) ;

Je suis nouveau en Objective-C et plutôt nul en maths, donc je suis sûr que je fais quelque chose de mal. Mais je ne vois pas quoi.

Merci.

0voto

Odrakir Points 2212

Ok, c'est pas grave, j'ai trouvé.

Il s'avère que myLayer.affineTransform effectue la transformation par rapport au centre de la couche alors que CGContextContactCTM l'effectue par rapport à l'origine.

Donc j'ai juste concaténé 2 autres transformations :

    CGPoint center;
    center.x = capa.bounds.origin.x + capa.bounds.size.width/2;
    center.y = capa.bounds.origin.y + capa.bounds.size.height/2;        
    CGAffineTransform trf1 = CGAffineTransformMakeTranslation(center.x, center.y);
    CGAffineTransform trf2 = CGAffineTransformMakeTranslation(-center.x, -center.y);        
    capa.affineTransform = CGAffineTransformConcat(trf1, CGAffineTransformConcat(mat, trf2));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X