UIView详解:3-视图的形变
在开发过程中,经常需要对视图对象的样式进行修改,常见的修改操作有位移、放大/缩小、旋转等。当涉及到视图位移的时候,可以修改视图的center以及frame属性;当涉及到视图的缩放以及旋转操作时,推荐修改视图的transform属性。
1、位移
当需要修改视图对象的位置时(上移、下移、左移、右移),可以通过修改视图对象的center和frame属性。
需要注意的是,不能直接修改结构体变量的值。下面的代码实现了左移效果。
- (IBAction)move:(id)sender {
CGPoint point = self.myView.center;
point.x -=10;
self.myView.center = point;
NSLog(@"myview frame :%@",NSStringFromCGRect(self.myView.frame));
}
2、放大/缩小
当需要修改视图对象的大小时,有两种方法可以完成,第一种方法可以修改视图对象的bounds.size属性,第二种方法是直接修改视图对象的transform属性,即让视图对象进行一次形变操作。在修改形变属性时,需要使用到如下的函数,其中:sx以及sy是在X轴以及Y轴两个方向上放大的比例。
CG_EXTERN CGAffineTransform CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy) CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
下面的示例代码,实现分别在X轴和Y轴方向放大1.1倍。
- (IBAction)scale:(id)sender {
self.myView.transform = CGAffineTransformScale(self.myView.transform, 1.1, 1.1);
NSLog(@"myview frame :%@",NSStringFromCGRect(self.myView.frame));
}
3、旋转
通过修改视图对象的transform属性,可以实现视图的顺时针旋转以及逆时针旋转,此时需要使用到如下函数,其中,angle属性是旋转的角度。
CG_EXTERN CGAffineTransform CGAffineTransformRotate(CGAffineTransform t, CGFloat angle) CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
下面的示例代码,实现了顺时针旋转45度。
- (IBAction)rotate:(id)sender {
self.myView.transform = CGAffineTransformRotate(self.myView.transform,M_PI_4);
NSLog(@"myview frame :%@",NSStringFromCGRect(self.myView.frame));
}
4、重置transform属性
当需要重置transform属性时,可以进行如下设置。但要注意的是:假如之前对视图对象的frame, center, bounds进行了修改,需要完全重置一个视图的样式,除了重置transform属性之外,还需要重置frame, center, bounds属性。
- (IBAction)reset:(id)sender {
self.myView.transform = CGAffineTransformIdentity;
}
示例代码
https://github.com/99ios/7.2.3
文章发布时间为: September 27th , 2016 at 03:02 pm
最后编辑时间为: September 6th , 2017 at 11:10 am
本文由 99ios 创作,转载请注明出处
最后编辑时间为: September 6th , 2017 at 11:10 am
本文由 99ios 创作,转载请注明出处