2011-09-26 81 views
2

我試圖改變一個CALayer的仿射變換,所以它裏面畫的是變形的。CGContextConcatCTM vs CALayer affineTransform

首先,我沒有使用CALayers,只是使用傳遞給CGContextConcactCTM的不同CGAffineTransform進行重繪。

雖然有效,但速度不夠快,所以我決定用CALayer來做,所以每次都不會重繪。它只是變化。

問題是,設置myLayer.affineTransform = myTransform;似乎沒有像使用CGContextConcatCTM(myTransform)重繪一樣的效果;

我是新來的Objective-C和數學相當跛腳,所以我敢肯定我做錯了什麼。但我看不到什麼。

謝謝。

+0

好吧,我找到了答案,但似乎我不能回答我自己8小時後,問... – Odrakir

回答

0

好的,沒關係,我發現了。

原來myLayer.affineTransform做相對於CGContextContactCTM相對於原點的圖層中心的轉換。

所以我只是串接2種其他轉換:

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

您還可以接受你自己答案。如果您想知道接受的是什麼,請閱讀[FAQ](http://stackoverflow.com/faq#howtoask)。 –