2011-03-17 41 views
4

我試圖通過施加CATransform3DMakeScale將其伸展一個UIView,我有:如何拉伸CALayer,同時保持完整的原點?

CATransform3DMakeScale(0.9, 1.0 - (0.1 * (path.row - midPath.row)), 1) 

問題的,這是雙重的:它給我留下了分數幀/界限,這似乎我不能圓或地板,它拉我的框架的起源,以便它的y原點不再是0.

有沒有一種方法,我可以只在一個方向拉我的圖層?換句話說,保持x和y原點固定並伸向這個原點或遠離它。

此外,CATransform3D中的不同mxx變量會影響哪些文檔?我環顧四周,找不到任何東西,而試驗和錯誤只讓我目瞪口呆。

回答

2

如果你想伸展你的CALayer時保持一個固定的起源,可以更改其屬性anchorPoint類似如下:

layer.anchorPoint = CGPointMake(0.0f, 0.0f); 

anchorPoint決定哪些變換應用到圖層的地步。它也與你的圖層的position屬性相關聯,所以如果你調整了anchorPoint,那麼以後可能需要重新定位圖層。

通過設置錨點,您應該能夠將圖層設置爲整體原點座標,並使其與變換一起伸展。但是,您不會保持整體的寬度和高度。

至於m12等一個CATransform3D的要素,即結構是4×4矩陣:

struct CATransform3D 
{ 
CGFloat m11, m12, m13, m14; 
CGFloat m21, m22, m23, m24; 
CGFloat m31, m32, m33, m34; 
CGFloat m41, m42, m43, m44; 
}; 
typedef struct CATransform3D CATransform3D; 

其中每個值表示矩陣中的一個位置。該矩陣基於OpenGL的3-D矩陣,如模型視圖矩陣。核心動畫提供了輔助函數來完成你需要的這個矩陣的大部分操作,但是現在你需要設置其中一個矩陣元素(例如m34以獲得透視效果)。

我從來沒有擅長矩陣數學,但你可以查看人們在OpenGL模型視圖矩陣背後的數學放在一起的任何寫法,並在這裏應用。

相關問題