iOS Transform动画

19 篇文章 2 订阅
3 篇文章 0 订阅
本文深入解析了iOS中的Transform动画,包括2D和3D变换原理,详细解释了CGAffineTransform和CATransform3D属性,以及如何通过rotate、scale和translate方法实现视图的旋转、缩放和平移。
摘要由CSDN通过智能技术生成

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’的值如下:

观察可以发现
actxbdty
视图宽放大或缩小视图旋转视图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这些相关的属性,都是视图使用中及其重要的属性。视图属性参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值