iOS Transform动画

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,读者可以回顾frameboundscenter这些相关的属性,都是视图使用中及其重要的属性。视图属性参考

发布了54 篇原创文章 · 获赞 25 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/WxqHUT/article/details/104167332