1. transform属性
在OC中,通过transform属性可以修改对象的平移、缩放比例和旋转角度
常用的创建transform结构体方法分两大类
(1) 创建“基于控件初始位置”的形变
CGAffineTransformMakeTranslation(平移)
CGAffineTransformMakeScale(缩放)
CGAffineTransformMakeRotation(旋转)
(2) 创建“基于transform参数”的形变
CGAffineTransformTranslate
CGAffineTransformScale
CGAffineTransformRotate
补充:
在OC中,所有跟角度相关的数值,都是弧度值,180° = M_PI
正数表示顺时针旋转
负数表示逆时针旋转
提示:由于transform属性可以基于控件的上一次的状态进行叠加形变,例如,先旋转再平移。因此在实际动画开发中,当涉及位置、尺寸形变效果时,大多修改控件的transform属性,而不是frame、bounds、center 。
示例代码:
- #import "ViewController.h"
- @interface ViewController ()
- @property (weak, nonatomic) IBOutlet UIButton *button;
- @end
- @implementation ViewController
- - (void)viewDidLoad {
- [super viewDidLoad];
- // Do any additional setup after loading the view, typically from a nib.
- }
- // 平移
- - (IBAction)trasnlate:(id)sender {
- // 一次性的移动10 的距离
- // _button.transform = CGAffineTransformMakeTranslation(10, 0);
- // 如果想要持续移动,那么就需要得到当前view的transform
- // 1. 获取当前button的transform属性
- CGAffineTransform transform = _button.transform;
- // 2. 在transform的基础上进行修改
- _button.transform = CGAffineTransformTranslate(transform, 10, 0);
- }
- // 缩放
- - (IBAction)scal:(id)sender {
- // 执行缩放
- // _button.transform = CGAffineTransformMakeScale(0.5, 0.5);
- // 持续执行缩放
- // 1. 获取当前button的transform
- CGAffineTransform transform = _button.transform;
- // 2. 在transform进行修改
- _button.transform = CGAffineTransformScale(transform, 0.5, 0.5);
- }
- // 旋转
- - (IBAction)rotate:(id)sender {
- // _button.transform = CGAffineTransformMakeRotation(M_PI_4);
- [UIView animateWithDuration:1 animations:^{
- // 1. 获取当前button的transform
- CGAffineTransform transform = self.button.transform;
- // 2. 在transform进行修改
- self.button.transform = CGAffineTransformRotate(transform, M_PI_4);
- self.button.transform = CGAffineTransformTranslate(transform, 30, 0);
- self.button.transform = CGAffineTransformScale(transform, 1.5, 1.5);
- }];
- }
- - (IBAction)reset:(id)sender {
- // 恢复原始状态
- _button.transform = CGAffineTransformIdentity;
- }
- @end