Transform动画
iOSTransform动画是基于frame
属性结合animate
方法构成的动画效果,应用于视图的二维、三维层次的变化。
view.transform
:是View的旋转、拉伸、移动等属性,是2D的,是CGAffineTransform
属性。view.layer.transform
:是layer层的3D变化,是CATransform3D
属性。
view.transform
var transform: CGAffineTransform { get set }
view.transform
是可读写的CGAffineTransform
属性。
CGAffineTransform
CGAffineTransform是一个映射转换3*3的矩阵,用来绘画2D图像。可以实现放大、缩小、平移。
struct CGAffineTransform
struct CGAffineTransform {
CGFloat a, b, c, d;
CGFloat tx, ty;
};
可以看出CGAffineTransform是一个结构体,里面有(a,b,c,d,tx,ty)六个参数,其实CGAffineTransform是3*3的矩阵,里面是有九个参数的,但是其他三个默认是(0,0,1),所以就没有列出来。
2D仿射变换的过程:从概念上讲,仿射变换将视图中每个点(x,y)的行向量与该矩阵相乘,产生代表相应点(x',y')的向量。从每个点(x,y)到(x',y')的变化,从而形成2D图形变化。
矩阵乘积得到是行向量[x’ y’ 1],x’和y’的值如下:
观察可以发现
a | c | tx | b | d | ty |
---|---|---|---|---|---|
视图宽放大或缩小 | 视图旋转 | 视图x轴横移 | 视图旋转 | 视图高放大或缩小 | 视图y轴横移 |
默认值是(1,0,0,1,0,0)对应该类属性
static var identity: CGAffineTransform { get }
API
实例方法与初始化方法相近。
//旋转
func rotated(by: CGFloat) -> CGAffineTransform
Returns an affine transformation matrix constructed by rotating an existing affine transform.
//放大或缩小
func scaledBy(x: CGFloat, y: CGFloat) -> CGAffineTransform
Returns an affine transformation matrix constructed by scaling an existing affine transform.
//横移或者竖移
func translatedBy(x: CGFloat, y: CGFloat) -> CGAffineTransform
Returns an affine transformation matrix constructed by translating an existing affine transform.
更多详细的实例方法参考
既然聊到transform,读者可以回顾frame,bounds,center这些相关的属性,都是视图使用中及其重要的属性。视图属性参考