1. CGAffineTransform定义
CGAffineTransform是个结构体,我们可以使界面平移、缩放和旋转操作。
struct CGAffineTransform {
CGFloat a, b, c, d;
CGFloat tx, ty;
};
2. 放射变换
2.1 平移
tx
和ty
分别代表X轴和Y轴方向上的位移。
CGAffineTransform CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty)
CGAffineTransformMakeTranslation(100, 10)
,显示如下
2.2 缩放
sx
和sy
分别代表X轴和Y轴方向上的缩放。
CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)
CGAffineTransformMakeScale(0.6, 0.6)
,显示如下
2.3 旋转
angle
表示旋转角度(大于0顺时针,小于0逆时针),M_PI_2
表示90度。
CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)
CGAffineTransformMakeRotation(M_PI_2)
,显示如下
2.4 反转
CGAffineTransformInvert
可以反转原有的效果
CGAffineTransform CGAffineTransformInvert(CGAffineTransform t)
CGAffineTransformInvert(CGAffineTransformMakeRotation(M_PI_2))
,显示如下
2.5 组合
CGAffineTransformConcat
可以组合两种动画效果
CGAffineTransform CGAffineTransformConcat(CGAffineTransform t1, CGAffineTransform t2)
CGAffineTransformConcat(CGAffineTransformMakeRotation(M_PI), CGAffineTransformMakeScale(0.5, 0.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简单分析