Objective c CGContextConcatCTM与CALayer仿射变换

Objective c CGContextConcatCTM与CALayer仿射变换,objective-c,quartz-graphics,affinetransform,Objective C,Quartz Graphics,Affinetransform,我试图改变CALayer的仿射变换,这样画出来的东西就会变形 首先,我在没有CALayers的情况下做这件事,只是使用传递给CGContextConactCTM的不同CGAffineTransform重新绘制 这很管用,但速度不够快,所以我决定用CALayer来做,这样就不会每次都重新绘制了。它只是被改变了 问题是设置myLayer.affineTransform=myTransform;似乎与使用CGContextConcatCTM(myTransform)重画效果不一样 我刚接触Object

我试图改变CALayer的仿射变换,这样画出来的东西就会变形

首先,我在没有CALayers的情况下做这件事,只是使用传递给CGContextConactCTM的不同CGAffineTransform重新绘制

这很管用,但速度不够快,所以我决定用CALayer来做,这样就不会每次都重新绘制了。它只是被改变了

问题是设置myLayer.affineTransform=myTransform;似乎与使用CGContextConcatCTM(myTransform)重画效果不一样

我刚接触Objective-C,数学也很差劲,所以我肯定我做错了什么。但我看不出是什么


谢谢。

好的,没关系,我知道了

结果是myLayer.affineTransform相对于层中心进行变换,而CGContextContactCTM相对于原点进行变换

所以我刚刚连接了另外两个变换:

    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));      

好吧,没关系,我发现了

结果是myLayer.affineTransform相对于层中心进行变换,而CGContextContactCTM相对于原点进行变换

所以我刚刚连接了另外两个变换:

    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));      

好的,我找到了答案,但在问了8个小时后我似乎无法回答自己…好的,我找到了答案,但在问了8个小时后我似乎无法回答自己…你也可以接受自己的答案。如果你想知道什么是接受,请阅读。你也可以接受自己的答案。如果你想知道什么是接受,请阅读。