m11:x轴方向进行缩放
m12:和m21一起决定z轴的旋转
m13:和m31一起决定y轴的旋转
m14:
m21:和m12一起决定z轴的旋转
m22:y轴方向进行缩放
m23:和m32一起决定x轴的旋转
m24:
m31:和m13一起决定y轴的旋转
m32:和m23一起决定x轴的旋转
m33:z轴方向进行缩放
m34:透视效果,m34 = -1 / D,D越小,透视效果越明显,必须在有旋转效果的前提下,才会看到透视效果。
m41:x轴方向进行平移
m42:y轴方向进行平移
m43:z轴方向进行平移
m44:初始为1
/* 初始化一个CATransform3D的实例,默认的值是[1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1]*/
const CATransform3D CATransform3DIdentity
/* 判断一个CATransform3D的实例是否是初始化值。*/
bool CATransform3DIsIdentity (CATransform3D t)
/* 判断两个CATransform3D的实例的值是否相等。*/
bool CATransform3DEqualToTransform (CATransform3D a,CATransform3D b)
/* 以默认值为基准,返回一个平移'(tx, ty, tz)'后的CATransform3D实例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)
/* 以默认值为基准,返回一个缩放'(sx, sy, sz)'后的CATransform3D实例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的中心对称变化
* 当sx < 0时,layer会在缩放的基础上沿穿过其中心的竖直线翻转
* 当sy < 0时,layer会在缩放的基础上沿穿过其中心的水平线翻转 */
CATransform3D CATransform3DMakeScale (CGFloat sx, CGFloat sy,CGFloat sz)
/* 以默认值为基准,返回一个沿矢量'(x, y, z)'轴线,逆时针旋转'angle'弧度后的CATransform3D实例
* 弧度 = π / 180 × 角度,'M_PI'代表180角度
* x,y,z决定了旋转围绕的轴线,取值为[-1, 1]。例如(1,0,0)是绕x轴旋转,(0.5,0.5,0)是绕x轴与y轴夹角45°为轴线旋转 */
CATransform3D CATransform3DMakeRotation (CGFloat angle, CGFloat x,CGFloat y, CGFloat z)
/* 以't'为基准,返回一个平移'(tx, ty, tz)'后的CATransform3D实例t':
* t' = translate(tx, ty, tz) * t.
* '(tx, ty, tz)'同'CATransform3DMakeTranslation' */
CATransform3D CATransform3DTranslate (CATransform3D t, CGFloat tx,CGFloat ty, CGFloat tz)
/* 以't'为基准,返回一个缩放'(sx, sy, sz)'后的CATransform3D实例t':
* t' = scale(sx, sy, sz) * t.
* '(sx, sy, sz)'同'CATransform3DMakeScale' */
CATransform3D CATransform3DMakeScale (CGFloat sx, CGFloat sy,CGFloat sz)
/* 以't'为基准,返回一个沿矢量'(x, y, z)'轴线,逆时针旋转'angle'弧度后的CATransform3D实例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)
/* 叠加两个CATransform3D实例的值并返回得到的CATransform3D实例t':
* t' = a * b. */
CATransform3D CATransform3DConcat (CATransform3D a, CATransform3D b)
/* 反转一个CATransform3D实例并返回结果
* 如果没有翻转则返回原始矩阵 */
CATransform3D CATransform3DInvert (CATransform3D t)
/* 将一个CGAffineTransform实例转换得到一个同样效果的CATransform3D实例 */
CATransform3D CATransform3DMakeAffineTransform (CGAffineTransform m)
/* 判断一个CATransform3D实例能否被成功的转换成一个CGAffineTransform实例 */
bool CATransform3DIsAffine (CATransform3D t)
/* 将一个CATransform3D实例转换得到一个同样效果的CGAffineTransform实例
* 如果不能成功转换,则返回空值 */
CGAffineTransform CATransform3DGetAffineTransform (CATransform3D t)
关于m34解释
CATransform3D是一个4* 4机构体,改变他的m34这个属性,改变透视,看起来更加立体,m34= -1/D,D越小效果越明显,m34为负值表示远离屏幕,正值相反。下边的图就是加m34和不加的区别。
position与anchorPoint
frame.origin.x = position.x - anchorPoint.x * bounds.size.width;
frame.origin.y = position.y - anchorPoint.y * bounds.size.height;
blueView.layer.anchorPoint = CGPointMake(0.5, 0.5);
blueView.layer.anchorPoint = CGPointMake(0, 0);
https://blog.csdn.net/yongyinmg/article/details/37927793
https://www.jianshu.com/p/f14c05425739
https://www.jianshu.com/p/3dd14cfbdc53
https://www.jianshu.com/p/78ff7919a701