CALayer动画

CGAffineTransform

UIView 的 transform 属性是一 个 CGAffineTransform 类型,用于在二维空间做旋转,缩放和平移。 CGAffineTransform 是一个可以和二维空间向量(例如 的3X2的矩阵)
原理如下:
在这里插入图片描述
用 CGPoint 的每一列和 CGAffineTransform 矩阵的每一行对应元素相乘再求 和,就形成了一个新的 CGPoint 类型的结果。要解释一下图中显示的灰色元素, 为了能让矩阵做乘法,左边矩阵的列数一定要和右边矩阵的行数个数相同,所以要 给矩阵填充一些标志值,使得既可以让矩阵做乘法,又不改变运算结果,并且没必 要存储这些添加的值,因为它们的值不会发生变化,但是要用来做运算

矩阵乘法结果为:x’ = ax + cy + tx y’ = bx + dy + ty
CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty)平移的话,只要加tx,ty,x’, y’变化,所以坐标变化。
默认值 CGAffineTransformMake(1, 0, 0, 1, tx, ty)
旋转和缩放原理相同

  • 创建一个 CGAffineTransform 实例:

    CGAffineTransformMakeRotation(CGFloat angle)
    实现以初始位置为基准,将坐标系统逆时针旋转angle弧度(弧度=π/180×角度,M_PI弧度代表180角度)

    CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)
    实现以初始位置为基准,在x轴方向上缩放x倍,在y轴方向上缩放y倍
    注 : 当sx为正值时,会在x轴方向上缩放x倍,反之,则在缩放的基础上沿着竖直线翻转;当sy为正值时,会在y轴方向上缩放y倍,反之,则在缩放的基础上沿着水平线翻转

    CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty)
    实现以初始位置为基准,在x轴方向上平移x单位,在y轴方向上平移y单位
    如果tx或ty为负值就是向反方向平移

UIView的变换可以通过设置transform属性做变换,但实际上它只是封装了内部图层

CALayer同样也有一个transform属性,但它的类型是 CATransform3D
CALayer 对应于UIView的transform属性叫做 affineTransform

复合变换

当操纵一个变换的时候,初始生成一个什么都不做的变换很重要,也就是创建一 个 CGAffineTransform 类型的空值,矩阵论中称作单位矩阵

CGAffineTransform transform = CGAffineTransformIdentity
- (void)viewDidLoad

{

[super viewDidLoad];

//create a new transform

CGAffineTransform transform = CGAffineTransformIdentity;

//scale by 50%

transform = CGAffineTransformScale(transform, 0.5, 0.5);

//rotate by 30 degrees

transform = CGAffineTransformRotate(transform, M_PI / 180.0 * 30.0);

//translate by 200 points

transform = CGAffineTransformTranslate(transform, 200, 0);

//apply transform to layer

self.layerView.layer.affineTransform = transform;

}

以上就实现了连续三个变换

3D变换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值