一 分类
平移:
CGAffineTransformMakeTranslation(10, 0) : 在初始位置的基础上进行平移
CGAffineTransformTranslate(self.redView.transform, 10, 0) 多次生效, 以当前状态为基础
旋转:
CGAffineTransformMakeRotation:angle : 是弧度
M_PI_4 : 45°
如果传值为负 : 逆时针进行旋转
CGAffineTransformMakeRotation(M_PI_4)
CGAffineTransformRotate(self.redView.transform, -M_PI_4)
缩放:
CGAffineTransformMakeScale(1.2, 1.2) : x轴上放大1.2倍, y 轴上放大1.2 倍
如果想要缩小, 就传递小于1的值, 如果传递为负值, 这个view 就疯了
CGAffineTransformMakeScale(1.2, 1.2)
CGAffineTransformScale(self.redView.transform, 0.8, 0.5)
// 当view 的transform 发生变化的时候, 会影响到 frame , 所以, 如果做动画, 就用bounds 和 center 来代替
animatable. do not use frame if view is transformed since it will not correctly reflect the actual location of the view. use bounds + center instead
二 代码案列
// (一) 平移
- (IBAction)translate:(id)sender {
/**
CGAffineTransformMakeTranslation(10, 0) :在x轴上,向右平移10的距离,在y轴上不动,只能生效一次:相对于初始位置,平移10的距离,当再次平移的时候,如果距离初始位置有10的间距,则不生效
// self.redView.transform:当前redView transform的值
CGAffineTransformTranslate(self.redView.transform, 10, 0) :在现在位置的基础上进行平移
*/
//self.redView.transform = CGAffineTransformMakeTranslation(10, 10);
self.redView.transform=CGAffineTransformTranslate(self.redView.transform,10,0);
}
// (二)旋转
- (IBAction)rotate:(id)sender {
/**
CGAffineTransformMakeRotation(<#CGFloat angle#>):是弧度
M_PI_4 : 45°
如果传值为负:逆时针进行旋转
*/
//self.redView.transform = CGAffineTransformMakeRotation(M_PI_4);
NSLog(@"旋转前: %@",NSStringFromCGRect(self.redView.bounds));
self.redView.transform=CGAffineTransformRotate(self.redView.transform, -M_PI_4);
NSLog(@"旋转后: %@",NSStringFromCGRect(self.redView.bounds));
}
// (三)放大
- (IBAction)scale:(id)sender {
/**
CGAffineTransformMakeScale(1.2, 1.2) : x轴上放大1.2倍, y轴上放大1.2倍
如果想要缩小,就传递小于1的值,如果传递为负值,这个view就疯了
*/
//self.redView.transform = CGAffineTransformMakeScale(1.2, 1.2);
self.redView.transform=CGAffineTransformScale(self.redView.transform,0.8,0.5);
}
// (四)恢复
- (IBAction)reset:(id)sender {
//清空所有的transfrom属性
self.redView.transform=CGAffineTransformIdentity;
}
网友评论