视图旋转,缩放,平移

iOS CGAffine Transform属性

CGAffineTransform相关函数

理解iOS中CGAffineTransform与矩阵的关系
1.缩放

//传比例
CG_EXTERN CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)
  CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);

2.旋转

CG_EXTERN CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)
  CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);


CGAffineTransformMakeRotation(M_PI);

3.平移

CG_EXTERN CGAffineTransform CGAffineTransformMakeTranslation(CGFloat tx,
  CGFloat ty) CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);

二,这种变换状态只能重复一次,再次是不起作用的,

- (IBAction)clickBtn:(id)sender {

       [UIView animateWithDuration:1 animations:^{

        _testImage.transform = CGAffineTransformMakeTranslation(100,0);

    } completion:^(BOOL finished) {
        _testImage.transform = CGAffineTransformMakeTranslation(0,0);

    }];

}

即去掉这句:

        _testImage.transform = CGAffineTransformMakeTranslation(0,0);

点击按钮,向右移动100只能一次,后面无论点多少次都不会动了。


三,ps:
CGAffineTransform 和 CATransform3D的区别:

1、CGAffineTransform 一般用于2D操作,如在 UIView中。而CATransform3D 一般用于操作view的layer的,是 Core Animation的结构体,可以用来做比较复杂的3D操作。
2、CALayer 和UIView 中的transform属性,分别操作的是CALayer和UIView,二者中的transform的关系可以通过CALayer和UIView之间的关系来理解


四,CGAffineTransformRotate和CGAffineTransformMakeRotation的区别

  1. CGAffineTransformRotate(imageView.transform, M_PI)
    这个方法每次旋转是以上次旋转之后的中心进行旋转
    2.CGAffineTransformMakeRotation( M_PI)
    而这种方法没次旋转都是以最原始状态下的中心进行旋转,所以这种方法只能旋转一次,再点击就不能使其旋转了

换言之:

- (IBAction)clickBtn:(id)sender {   
      _testImage.transform = CGAffineTransformRotate(_testImage.transform, M_PI);
}

CGAffineTransformRotate只要我点,都会转,
但是
如果是CGAffineTransformMakeRotation无论我点多少次,都只会转一次。

推荐阅读更多精彩内容