免费开源的iOS开发学习平台

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