本文转载自木马不在转的简书iOS 仿射变换CGAffineTransform
iOS所有继承UIView的类都有一个CGAffineTransform
类型的属性transform
,它是定义在二维空间上完成View的平移,旋转,缩放等效果的实现。这篇文章主要是展示所有值变化的效果。
一:下面是原始的(默认的)transform
1(a) 0(b) 0
仿射变换 transform: 0(c) 1(d) 0
0(tx) 0(ty) 1
CGAffineTransformMake(a, b, c, d, tx, ty)
默认值 CGAffineTransformMake(1, 0, 0, 1, 0, 0);
二:实战演示
1.原始值
image2.修改a的值
image3.修改b的值
image4.修改c的值
image5.修改d的值
image6.修改tx的值
image7.修改ty的值
image相信同学应该知道了它们每一个值的变化,这样就可以通过修改它们的值来完成你想要的动画效果。
三:下面是Apple整合的transform
-
平移 :
①根据本身的transform
进行平移 CGAffineTransformMakeTranslation(CGFloat tx,CGFloat ty)
②根据本身的transform
后者另外的transform
进行平移CGAffineTransformTranslate(CGAffineTransform t,CGFloat tx,CGFloat ty)
-
缩放 :
①根据本身的transform
进行缩放
CGAffineTransformMakeScale(CGFloat sx,CGFloat sy)
②根据本身的transform
后者另外的transform
进行缩放
CGAffineTransformScale(CGAffineTransform t,CGFloat sx,CGFloat sy)
-
旋转 :
① 根据本身的transform
进行旋转
CGAffineTransformMakeRotation(CGFloat angle) (angle 旋转的角度)
②根据本身的transform
后者另外的transform
进行旋转
CGAffineTransformRotate(CGAffineTransform t,CGFloat angle)
-
恢复 :反向旋转
CGAffineTransformInvert(CGAffineTransform t)
-
合并:
CGAffineTransformConcat(CGAffineTransform t1,CGAffineTransform t2)
两个transform
合并起来
-
倾斜:
这个使我们自己定义
-(CGAffineTransform) CGAffineTransformMakeShear(CGFloat x,CGFloat y)
{
CGAffineTransform transform = CGAffineTransformIdentity;
transform.c= -x;
transform.b= y;
returntransform;
}
layer.affineTransform = CGAffineTransformMakeShear(1,0);
-
评测:
查看是不是默认的transform
①Bool CGAffineTransformIsIdentity(CGAffineTransform t)
比较两个transform
是否相等
②bool CGAffineTransformEqualToTransform(CGAffineTransform t1,CGAffineTransform t2)
仿射矩阵应用:
①CGPointApplyAffineTransform(CGPoint point,CGAffineTransform t)
得到新的中心CGPoint
②CGSizeApplyAffineTransform(CGSize size,CGAffineTransform t)
得到新的size CGSize
③CGRectApplyAffineTransform(CGRect rect,CGAffineTransform t)
得到新的rect CGRect
放射矩阵一个常用的情形就是根据用户的手势来相应的改变视图的变换
UIPanGestureRecognizer
位移
UIPinchGestureRecognizer
缩放
UIRotationGestureRecognizer
旋转
苹果官方的建议,要多次使用transform
,最好是初始化一个CGAffineTransform
,进行多次操作。
网友评论