iOS CGAffineTransform仿射变换

1. CGAffineTransform定义

CGAffineTransform是个结构体,我们可以使界面平移、缩放和旋转操作。

struct CGAffineTransform {
    CGFloat a, b, c, d;
    CGFloat tx, ty;
};

2. 放射变换

2.1 平移

txty分别代表X轴和Y轴方向上的位移。

CGAffineTransform CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty)

CGAffineTransformMakeTranslation(100, 10),显示如下
iOS CGAffineTransform仿射变换_第1张图片

2.2 缩放

sxsy分别代表X轴和Y轴方向上的缩放。

CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)

CGAffineTransformMakeScale(0.6, 0.6),显示如下
iOS CGAffineTransform仿射变换_第2张图片

2.3 旋转

angle表示旋转角度(大于0顺时针,小于0逆时针),M_PI_2表示90度。

CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)

CGAffineTransformMakeRotation(M_PI_2),显示如下
iOS CGAffineTransform仿射变换_第3张图片

2.4 反转

CGAffineTransformInvert可以反转原有的效果

CGAffineTransform CGAffineTransformInvert(CGAffineTransform t)

CGAffineTransformInvert(CGAffineTransformMakeRotation(M_PI_2)),显示如下
iOS CGAffineTransform仿射变换_第4张图片

2.5 组合

CGAffineTransformConcat可以组合两种动画效果

CGAffineTransform CGAffineTransformConcat(CGAffineTransform t1, CGAffineTransform t2)

CGAffineTransformConcat(CGAffineTransformMakeRotation(M_PI), CGAffineTransformMakeScale(0.5, 0.5)),显示如下
iOS CGAffineTransform仿射变换_第5张图片

3. 其他属性和方法

// 单位矩阵,可以用于初始化或者还原
CG_EXTERN const CGAffineTransform CGAffineTransformIdentity

// 在transform基础上平移
CG_EXTERN CGAffineTransform CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloat ty)

// 在transform基础上缩放
CG_EXTERN CGAffineTransform CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy)

// 在transform基础上旋转
CG_EXTERN CGAffineTransform CGAffineTransformRotate(CGAffineTransform t, CGFloat angle)

// 判断transform是否相等
CG_EXTERN bool CGAffineTransformEqualToTransform(CGAffineTransform t1, CGAffineTransform t2)

// 得到新的point
CG_EXTERN CGPoint CGPointApplyAffineTransform(CGPoint point, CGAffineTransform t)

// 得到新的size
CG_EXTERN CGSize CGSizeApplyAffineTransform(CGSize size, CGAffineTransform t)

// 得到新的rect
CG_EXTERN CGRect CGRectApplyAffineTransform(CGRect rect, CGAffineTransform t)

关于CGAffineTransform内部的矩阵变换可参考CGAffineTransform简单分析

你可能感兴趣的:(iOS,图像动画,ios,AffineTransform)