视图旋转,缩放,平移
2017-07-05 本文已影响61人
杨大虾
理解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的区别
- CGAffineTransformRotate(imageView.transform, M_PI)
这个方法每次旋转是以上次旋转之后的中心进行旋转
2.CGAffineTransformMakeRotation( M_PI)
而这种方法没次旋转都是以最原始状态下的中心进行旋转,所以这种方法只能旋转一次,再点击就不能使其旋转了
换言之:
- (IBAction)clickBtn:(id)sender {
_testImage.transform = CGAffineTransformRotate(_testImage.transform, M_PI);
}
CGAffineTransformRotate只要我点,都会转,
但是
如果是CGAffineTransformMakeRotation无论我点多少次,都只会转一次。