今天我们来讲讲UIView中提供的对其内容进行affine变换的功能。具体来说,变换包括扩大、缩小、旋转、反转、平移等。
要进行affine变换,其实就是想UIView的transform属性中设置CGAffineTransform的结构体。当然,这需要行列式的知识。为了方便初学者的理解,此处就绕过行列式的设置,直接利用UIKit库为我们提供的变形类型。
此处,我做了一个旋转的demo。希望通过这个,能让初学者举一反三的学会其他的affine操作。
- (void)viewDidLoad
{
[super viewDidLoad];
//初始化视图
UIImage *catIMG = [UIImage imageNamed:@"cat"];
catView = [[UIImageView alloc]initWithImage:catIMG];
catView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
[self.view addSubview:catView];
//加入一个button,实现旋转操作的触发
UIButton *changeView = [UIButton buttonWithType:UIButtonTypeRoundedRect];
changeView.frame = CGRectMake(0, 0, 100, 40);
changeView.center = CGPointMake(160, 400);
[changeView setTitle:@"Affine" forState:UIControlStateNormal];
changeView.titleLabel.font = [UIFont boldSystemFontOfSize:12];
//利用此方法实现------Action方法,即旋转操作
[changeView addTarget:self action:@selector(Action) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:changeView];
}
- (void)Action{
//利用CGAffineTransformMakeRotation(度数)实现UIImageView的旋转,当然,如UIlabe和UIButton等UIView子类也同样适用
catView.transform = CGAffineTransformMakeRotation(90 * (M_1_PI / 180.0));
}
效果如如下:
点击button后,调用Action方法,实现旋转的效果图如下:
当然,CGAffineTransform的变换类型还有:
扩大缩小:CGAffineTransformMakeScale(宽度倍数,高度倍数)
左右反转:CGAffineTransformScale( 原CGAffineTransform对象,-1.0,1.0)
上下反转:CGAffineTransformScale( 原CGAffineTransform对象,1.0,-1.0)
平行移动:CGAffineTransformMakeTranslation(向右移动像素,向上移动像素)
两个函数的复合:CGAffineTransformContact( CGAffineTransform1,CGAffineTransform2)