CALayer Transform

变换

仿射变换

CGAffineTransform

“仿射”的意思是无论变换矩阵用什么值,图层中平行的两条线在变换之后任然保持平行

1
2
3
CGAffineTransformMakeRotation(CGFloat angle) 
CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)
CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty)

iOS 变换函数使用弧度为单位

库中提供了两个宏定义做弧度角度转换

1
2
#define RADIANS_TO_DEGREES(x) ((x)/M_PI*180.0) 
#define DEGREES_TO_RADIANS(x) ((x)/180.0*M_PI)

混合变换

1
2
3
4
CGAffineTransformRotate(CGAffineTransform t, CGFloat angle)     
// t 表示想要混合的CGAffineTransform
CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy)
CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloat ty)

混合两个已存在的变换矩阵

1
CGAffineTransformConcat(CGAffineTransform t1, CGAffineTransform t2);

变换的顺序会影响最终的结果,也就是说旋转之后的平移和平移之后的旋转结果可能不同。
阅读实例

3D变换

1
2
3
CATransform3DMakeRotation(CGFloat angle, CGFloat x, CGFloat y, CGFloat z)
CATransform3DMakeScale(CGFloat sx, CGFloat sy, CGFloat sz)
CATransform3DMakeTranslation(Gloat tx, CGFloat ty, CGFloat tz)

iOS上的坐标系及绕x、y、z 轴旋转

透视投影

CATransform3D的透视效果通过一个矩阵中一个很简单的元素来控制:m34。m34用于按比例缩放X和Y的值来计算到底要离视角多远。

m34的默认值是0,我们可以通过设置m34为-1.0 / d来应用透视效果,d 通常为 500-1000