我們先來看一下官方提供的CATransform3D.h 類里面的內(nèi)容沙峻。
CATransform3D.h 開頭我們看到的是CATransform3D的結(jié)構(gòu)體表示的一個(gè)矩陣暖夭。
分別表示:
m11(x縮放), m12(y切變), m13(旋轉(zhuǎn)), m14();
m21(x切變), m22(y縮放), m23(), m24();
m31(旋轉(zhuǎn)), m32(), m33(), m34(透視效果锹杈,離視角近的地方放大撵孤,離視角遠(yuǎn)的地方縮小。正直/負(fù)值都有意義);
CGFloat m41(x平移), m42(y平移), m43(z平移), m44();
注意:
若m11 == m22竭望,整體比例變換邪码,
若m33>1,圖形整體縮小咬清,
若0 < m33 < 1,圖形整體放大闭专;
若 s < 0,發(fā)生關(guān)于原點(diǎn)的對稱等比變換旧烧。
接下來就是官方提供的關(guān)于 CATransform3D 的一些方法:
CATransform3DIdentity 是4x4單位矩陣影钉,該矩陣沒有縮放,旋轉(zhuǎn)掘剪,歪斜平委,透視。該矩陣應(yīng)用到圖層上夺谁,就是設(shè)置默認(rèn)值
CATransform3DIsIdentity ? ?返回bool? ? 判斷是不是單位形變?
CATransform3DEqualToIdentity 返回bool 判斷兩個(gè)形變是否相同
CATransform3DMakeTranslation
tx:X軸偏移位置廉赔,往下為正數(shù)。(x軸方向?yàn)樯舷拢?br>
ty:Y軸偏移位置予权,往右為正數(shù)昂勉。 (y軸方向?yàn)樽笥遥?/p>
tz:Z軸偏移位置,往外為正數(shù)扫腺。(z軸方向?yàn)槔锿猓饩褪钦f指向你的方向?yàn)檎?/p>
具體來說tz的值越大村象,圖層就越向外靠近笆环,有3D效果
CATransform3DMakeScale
sx:X軸縮放,代表一個(gè)縮放比例厚者,一般都是 0 --- 1 之間的數(shù)字躁劣。
sy:Y軸縮放。
sz:整體比例變換時(shí)库菲,也就是m11(sx)== m22(sy)時(shí)账忘,若m33(sz)> 1,圖形整體縮形跤睢鳖擒;若0<1,圖形整體放大烫止;若m33(sz)<0蒋荚,發(fā)生關(guān)于原點(diǎn)的對稱等比變換。
當(dāng)sx = 1馆蠕,sy = 1時(shí)期升。如圖:
當(dāng)sx = 0.5惊奇,sy = 0.5時(shí)。如圖:
CATransform3DMakeRotation
angle:旋轉(zhuǎn)的弧度播赁,所以要把角度轉(zhuǎn)換成弧度:角度 * M_PI / 180颂郎。
x:向X軸方向旋轉(zhuǎn)。值范圍-1 --- 1之間
y:向Y軸方向旋轉(zhuǎn)容为。值范圍-1 --- 1之間
z:向Z軸方向旋轉(zhuǎn)祖秒。值范圍-1 --- 1之間
ps:?向 X軸,Y軸都旋轉(zhuǎn)舟奠,就是沿著對角線旋轉(zhuǎn)竭缝。
CATransform3DTranslate
t:就是上一個(gè)函數(shù)。其他的都一樣耿戚。CATransform3DMakeTranslation
就可以理解為:函數(shù)的疊加湿故,效果的疊加。
funcCATransform3DTranslate(t:CATransform3D, _ tx:CGFloat, _ ty:CGFloat, _ tz:CGFloat) ->CATransform3D
Translate 't' by '(tx, ty, tz)' and return the result: t' = translate(tx, ty, tz) * t.
上邊是官方的解釋膜蛔,根據(jù)官方的解釋就是在原有的 t 的基礎(chǔ)上進(jìn)行形變坛猪,返回行遍之后的 t
CATransform3DScale
t:就是上一個(gè)函數(shù)。其他的都一樣皂股。CATransform3DMakeScale
就可以理解為:函數(shù)的疊加墅茉,效果的疊加。
CATransform3DRotate
t:就是上一個(gè)函數(shù)呜呐。其他的都一樣就斤。CATransform3DMakeRotation
就可以理解為:函數(shù)的疊加,效果的疊加蘑辑。
返回 bool? 判斷是否仿射
就是把一個(gè) CATransform3D 對象轉(zhuǎn)換成一個(gè) CGAffineTransform 對象洋机。
也就是把 CATransform3D 矩陣 轉(zhuǎn)換成 CGAffineTransform 矩陣
變換函數(shù)同時(shí)提供了可以比較一個(gè)變換矩陣是否是單位矩陣,或者兩個(gè)矩陣是否相等。
除了這些
也可以直接通過修改數(shù)據(jù)結(jié)構(gòu)和鍵值來設(shè)置變換效果洋魂。通過修改矩陣中不同的值來達(dá)到3D變換效果