今天來了解下CATransform3D的一些基本的知識姑丑。
CATransform3D是一個用于處理3D形變的類,其可以改變控件的平移蛤签、縮放、旋轉(zhuǎn)栅哀、斜交等,其坐標(biāo)系統(tǒng)采用的是三維坐標(biāo)系,即向右為x軸正方向,向下為y軸正方向,垂直屏幕向外為z軸正方向震肮。
方法的基本介紹
<p>CATransform3DMakeTranslation實現(xiàn)以初始位置為基準(zhǔn),在x軸方向上平移x單位,在y軸方向上平移y單位,在z軸方向上平移z單位。
格式:
<pre>public func CATransform3DMakeTranslation(_ tx: CGFloat, _ ty: CGFloat, _ tz: CGFloat) -> CATransform3D</pre>
當(dāng)tx為正值時,會向x軸正方向平移,反之,則向x軸負(fù)方向平移;當(dāng)ty為正值時,會向y軸正方向平移,反之,則向y軸負(fù)方向平移;當(dāng)tz為正值時,會向z軸正方向平移,反之,則向z軸負(fù)方向平移留拾。</p>
<p>CATransform3DTranslate實現(xiàn)以一個已經(jīng)存在的形變?yōu)榛鶞?zhǔn),在x軸方向上平移x單位,在y軸方向上平移y單位,在z軸方向上平移z單位戳晌。
格式:
<pre>public func CATransform3DTranslate(_ t: CATransform3D, _ tx: CGFloat, _ ty: CGFloat, _ tz: CGFloat) -> CATransform3D</pre></p>
CATransform3DMakeScale實現(xiàn)以初始位置為基準(zhǔn),在x軸方向上縮放x倍,在y軸方向上縮放y倍,在z軸方向上縮放z倍。
格式:
<pre>public func CATransform3DMakeScale(_ sx: CGFloat, _ sy: CGFloat, _ sz: CGFloat) -> CATransform3D</pre>
當(dāng)sx為正值時,會在x軸方向上縮放x倍,反之,則在縮放的基礎(chǔ)上沿著豎直線翻轉(zhuǎn);當(dāng)sy為正值時,會在y軸方向上縮放y倍,反之,則在縮放的基礎(chǔ)上沿著水平線翻轉(zhuǎn)痴柔。
CATransform3DScale實現(xiàn)以一個已經(jīng)存在的形變?yōu)榛鶞?zhǔn),在x軸方向上縮放x倍,在y軸方向上縮放y倍,在z軸方向上縮放z倍沦偎。
格式:
<pre>public func CATransform3DScale(_ t: CATransform3D, _ sx: CGFloat, _ sy: CGFloat, _ sz: CGFloat) -> CATransform3D</pre>
CATransform3DMakeRotation實現(xiàn)以初始位置為基準(zhǔn),在x軸,y軸,z軸方向上逆時針旋轉(zhuǎn)angle弧度(弧度=π/180×角度,M_PI弧度代表180角度),x,y,z三個參數(shù)只分是否為0。
格式:
<pre>public func CATransform3DMakeRotation(_ angle: CGFloat, _ x: CGFloat, _ y: CGFloat, _ z: CGFloat) -> CATransform3D</pre>
當(dāng)x,y,z值為0時,代表在該軸方向上不進(jìn)行旋轉(zhuǎn),當(dāng)值為1時,代表在該軸方向上進(jìn)行逆時針旋轉(zhuǎn),當(dāng)值為-1時,代表在該軸方向上進(jìn)行順時針旋轉(zhuǎn)咳蔚。
CATransform3DRotate實現(xiàn)以一個已經(jīng)存在的形變?yōu)榛鶞?zhǔn),在x軸,y軸,z軸方向上逆時針旋轉(zhuǎn)angle弧度(弧度=π/180×角度,M_PI弧度代表180角度),x,y,z三個參數(shù)只分是否為0豪嚎。
格式:
<pre>public func CATransform3DRotate(_ t: CATransform3D, _ angle: CGFloat, _ x: CGFloat, _ y: CGFloat, _ z: CGFloat) -> CATransform3D</pre>
注意:
CALayer中有一個transform屬性便是專門用來控制3D形變的,transform屬性默認(rèn)值為CATransform3DIdentity,可以在形變之后設(shè)置該值以還原到最初狀態(tài)。
關(guān)于結(jié)構(gòu)體中的m34谈火,在默認(rèn)情況下,系統(tǒng)采用正交投影,對于3D形變實際上是看不到3D效果的,在CATransform3D結(jié)構(gòu)體中有一個m34便允許我們將正交投影修改為有近大遠(yuǎn)小立體效果的透視投影,其中m34 = -1.0/z,這個z為觀察者與控件之間的距離侈询, m34必須在賦值transform之前設(shè)置才會生效。