CATransform3D
m11:x軸方向進(jìn)行縮放
m12:和m21一起決定z軸的旋轉(zhuǎn)
m13:和m31一起決定y軸的旋轉(zhuǎn)
m14:
m21:和m12一起決定z軸的旋轉(zhuǎn)
m22:y軸方向進(jìn)行縮放
m23:和m32一起決定x軸的旋轉(zhuǎn)
m24:
m31:和m13一起決定y軸的旋轉(zhuǎn)
m32:和m23一起決定x軸的旋轉(zhuǎn)
m33:z軸方向進(jìn)行縮放
m34:透視效果所意,m34 = -1 / D,D越小练湿,透視效果越明顯请祖,必須在有旋轉(zhuǎn)效果的前提下刀诬,才會(huì)看到透視效果玻佩。
m41:x軸方向進(jìn)行平移
m42:y軸方向進(jìn)行平移
m43:z軸方向進(jìn)行平移
m44:初始為1
image.png
/* 初始化一個(gè)CATransform3D的實(shí)例钻蹬,默認(rèn)的值是[1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1]*/
const CATransform3D CATransform3DIdentity
/* 判斷一個(gè)CATransform3D的實(shí)例是否是初始化值酷师。*/
bool CATransform3DIsIdentity (CATransform3D t)
/* 判斷兩個(gè)CATransform3D的實(shí)例的值是否相等珠闰。*/
bool CATransform3DEqualToTransform (CATransform3D a,CATransform3D b)
/* 以默認(rèn)值為基準(zhǔn)惜浅,返回一個(gè)平移'(tx, ty, tz)'后的CATransform3D實(shí)例t':
* t' = [1 0 0 0; 0 1 0 0; 0 0 1 0; tx ty tz 1]
* tx, ty, tz分別代表在x方向、y方向伏嗜、z方向的位移量 */
CATransform3D CATransform3DMakeTranslation (CGFloat tx,CGFloat ty, CGFloat tz)
/* 以默認(rèn)值為基準(zhǔn)坛悉,返回一個(gè)縮放'(sx, sy, sz)'后的CATransform3D實(shí)例t':
* t' = [sx 0 0 0; 0 sy 0 0; 0 0 sz 0; 0 0 0 1]
* sx, sy, sz分別代表在x方向、y方向承绸、z方向的縮放比例裸影,縮放是以layer的中心對(duì)稱變化
* 當(dāng)sx < 0時(shí),layer會(huì)在縮放的基礎(chǔ)上沿穿過其中心的豎直線翻轉(zhuǎn)
* 當(dāng)sy < 0時(shí)军熏,layer會(huì)在縮放的基礎(chǔ)上沿穿過其中心的水平線翻轉(zhuǎn) */
CATransform3D CATransform3DMakeScale (CGFloat sx, CGFloat sy,CGFloat sz)
/* 以默認(rèn)值為基準(zhǔn)轩猩,返回一個(gè)沿矢量'(x, y, z)'軸線,逆時(shí)針旋轉(zhuǎn)'angle'弧度后的CATransform3D實(shí)例
* 弧度 = π / 180 × 角度荡澎,'M_PI'代表180角度
* x,y,z決定了旋轉(zhuǎn)圍繞的軸線均践,取值為[-1, 1]。例如(1,0,0)是繞x軸旋轉(zhuǎn)摩幔,(0.5,0.5,0)是繞x軸與y軸夾角45°為軸線旋轉(zhuǎn) */
CATransform3D CATransform3DMakeRotation (CGFloat angle, CGFloat x,CGFloat y, CGFloat z)
/* 以't'為基準(zhǔn)浊猾,返回一個(gè)平移'(tx, ty, tz)'后的CATransform3D實(shí)例t':
* t' = translate(tx, ty, tz) * t.
* '(tx, ty, tz)'同'CATransform3DMakeTranslation' */
CATransform3D CATransform3DTranslate (CATransform3D t, CGFloat tx,CGFloat ty, CGFloat tz)
/* 以't'為基準(zhǔn),返回一個(gè)縮放'(sx, sy, sz)'后的CATransform3D實(shí)例t':
* t' = scale(sx, sy, sz) * t.
* '(sx, sy, sz)'同'CATransform3DMakeScale' */
CATransform3D CATransform3DMakeScale (CGFloat sx, CGFloat sy,CGFloat sz)
/* 以't'為基準(zhǔn)热鞍,返回一個(gè)沿矢量'(x, y, z)'軸線,逆時(shí)針旋轉(zhuǎn)'angle'弧度后的CATransform3D實(shí)例t':
* t' = rotation(angle, x, y, z) * t.
* '(angle, x, y, z)'同'CATransform3DMakeRotation' */
CATransform3D CATransform3DRotate (CATransform3D t, CGFloat angle,
CGFloat x, CGFloat y, CGFloat z)
/* 疊加兩個(gè)CATransform3D實(shí)例的值并返回得到的CATransform3D實(shí)例t':
* t' = a * b. */
CATransform3D CATransform3DConcat (CATransform3D a, CATransform3D b)
/* 反轉(zhuǎn)一個(gè)CATransform3D實(shí)例并返回結(jié)果
* 如果沒有翻轉(zhuǎn)則返回原始矩陣 */
CATransform3D CATransform3DInvert (CATransform3D t)
/* 將一個(gè)CGAffineTransform實(shí)例轉(zhuǎn)換得到一個(gè)同樣效果的CATransform3D實(shí)例 */
CATransform3D CATransform3DMakeAffineTransform (CGAffineTransform m)
/* 判斷一個(gè)CATransform3D實(shí)例能否被成功的轉(zhuǎn)換成一個(gè)CGAffineTransform實(shí)例 */
bool CATransform3DIsAffine (CATransform3D t)
/* 將一個(gè)CATransform3D實(shí)例轉(zhuǎn)換得到一個(gè)同樣效果的CGAffineTransform實(shí)例
* 如果不能成功轉(zhuǎn)換,則返回空值 */
CGAffineTransform CATransform3DGetAffineTransform (CATransform3D t)
關(guān)于m34解釋
CATransform3D是一個(gè)4* 4機(jī)構(gòu)體薇宠,改變他的m34這個(gè)屬性偷办,改變透視,看起來更加立體澄港,m34= -1/D椒涯,D越小效果越明顯,m34為負(fù)值表示遠(yuǎn)離屏幕回梧,正值相反废岂。下邊的圖就是加m34和不加的區(qū)別。
image.png
position與anchorPoint
frame.origin.x = position.x - anchorPoint.x * bounds.size.width狱意;
frame.origin.y = position.y - anchorPoint.y * bounds.size.height湖苞;
image.png
blueView.layer.anchorPoint = CGPointMake(0.5, 0.5);
blueView.layer.anchorPoint = CGPointMake(0.5, 0.5);
blueView.layer.anchorPoint = CGPointMake(0, 0);
blueView.layer.anchorPoint = CGPointMake(0, 0);
https://blog.csdn.net/yongyinmg/article/details/37927793
http://www.reibang.com/p/f14c05425739
http://www.reibang.com/p/3dd14cfbdc53
http://www.reibang.com/p/78ff7919a701