一,CGAffineTransform
1,CGAffineTransform是UIView层面的属性,是二维变换,任何view或者继承UIView的子类都具有该属性,可以通过这个变换实现对控件二维平面上的平移,旋转,缩放等
2,CGAffineTransform变换有两种方式:
- 2.1, 状态改变:
- 从一种状态变换到另外一种状态,结果不会叠加,相当于一次性操作,如下:
//旋转
_imageView.transform = CGAffineTransformMakeRotation(M_PI);//注意这里应该是弧度制,默认顺时针
//平移
_imageView.transform = CGAffineTransformMakeTranslation(20, 400);
//缩放
_imageView.transform = CGAffineTransformMakeScale(1.5, 1.5);
- 2.2, 值的改变
- 这种变换是建立在上一次变换的基础之上,结果会叠加,如下:
//旋转
_imageView.transform = CGAffineTransformRotate(_imageView.transform, M_PI);//注意这里应该是弧度制,默认顺时针
//平移
_imageView.transform = CGAffineTransformTranslate(_imageView.transform, 0, 30);
//缩放
_imageView.transform = CGAffineTransformScale(_imageView.transform, 0, 10);
- 2.3, 但是有一点需要注意:如果需要同时进行多个变换,比如说同时进行平移和缩放,那么直接对_imageView.transform会覆盖掉上一次的变换,解决办法如下:
- 把第二次的操作基于第一次操作之上即可,如下,第二次旋转操作是基于第一次缩放操作之上进行的:
CGAffineTransform transformScale = CGAffineTransformScale(_imageView.transform, 1.1, 1.1);
CGAffineTransform transformRotate = CGAffineTransformRotate(transformScale, M_PI_4);
_imageView.transform = transformRotate;
二,CATransform3D
1,CATransform3D是layer层面的属性,是三维属性,任何layer可以通过这个变换实现对控件在三维空间上的平移,旋转,缩放等
2,同二维变换一样,CATransform3D变换有两种方式:
//首先取得layer层
CALayer *layer = _imageView.layer;
//可以进行旋转
layer.transform = CATransform3DMakeRotation(M_PI, 1, 0, 0);
//或者平移
layer.transform = CATransform3DMakeTranslation(0, 200, 1000);
//又或者缩放
layer.transform = CATransform3DMakeScale(1.1, 1.1, 1.5);
- 2.2, 值的改变
- 种变换是建立在上一次变换的基础之上,结果会叠加,如下:
//旋转
layer.transform = CATransform3DRotate(layer.transform, M_PI, 1, 0, 0);
//抑或平移
layer.transform = CATransform3DTranslate(layer.transform, 0, 200, 0);
//又或缩放
layer.transform = CATransform3DScale(layer.transform, 1.2, 1.2, 1.2);
- 2.3, 多个变换组合起来,即一次性进行多个不同的变换
//同时进行旋转,缩放,平移操作
//注意:这里旋转180之后之后y轴正方向是会改变的
CATransform3D transformRotate = CATransform3DRotate(layer.transform, M_PI, 1, 0, 0);
CATransform3D transformTranslate = CATransform3DTranslate(transformRotate, 0, 200, 0);
layer.transform = CATransform3DScale(transformTranslate, 1.2, 1.2, 1.2);