UIView的变换主要包括缩放,旋转,翻转,平移等。
一、变换矩阵几何变换(变换矩阵的证明见拓展部分):
根本的变换基于计算机图形学二维矩阵变换的知识,需要根据需要改变二维变换的一个三维变换矩阵的参数来设置,基本变换用到CGAffineTransform三维矩阵的6个参数:
view.transform =CGAffineTransformMake(CGFloat a, CGFloat b, CGFloat c, CGFloat d,CGFloat tx, CGFloat ty)
二、另外系统封装了几个常用的图形变换函数:(同时明确Cocoa坐标系原点在左上角)
测试案例:
#import"AffineViewController.h"
@interfaceAffineViewController ()
@property(nonatomic) UIImageView *imageView;
@end
@implementationAffineViewController
- (void)viewDidLoad{
[super viewDidLoad];
// 背景色
self.view.backgroundColor = RGBColor(230, 230,230);
//测试二维图形变换
[self transformTest];
}
-(void)transformTest {
//定义一个UIView
_imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 150, 150)];
//设置中心
_imageView.center = self.view.center;
//背景颜色
_imageView.backgroundColor = [UIColorpurpleColor];
//贴图
[_imageView setImage:[UIImageimageNamed:@"male"]];
//图片内容适应
_imageView.contentMode =UIViewContentModeCenter;
//显示
[self.view addSubview:_imageView];
//逆时针旋转90度按钮
UIButton *btn_transform = [UIButtonbuttonWithType:UIButtonTypeSystem];
[btn_transformsetCenter:CGPointMake(ApplicationW/2,ApplicationH-100)];
[btn_transform setTitle:@"上下翻转缩放"forState:UIControlStateNormal];
[btn_transform sizeToFit];
[btn_transform addTarget:selfaction:@selector(click)forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn_transform];
}
- (void)click{
//顺时针旋转90度
//CGAffineTransform unClockWise90 =CGAffineTransformMakeRotation(90.0*(M_PI/180.0));
//向右移动20像素,向上移动30像素
//CGAffineTransform move =CGAffineTransformMakeTranslation(20.0, -30.0);
//宽度缩小一倍,高度两倍
CGAffineTransform scale =CGAffineTransformMakeScale(0.5, 2.0);
//上下翻转
CGAffineTransform upsideDown =CGAffineTransformScale(_imageView.transform, 1.0, -1.0);
//上下翻转缩放
CGAffineTransform contact =CGAffineTransformConcat(upsideDown, scale);
//变换
_imageView.transform = contact;
}
@end
三、拓展部分(变换矩阵的线性代数几何证明):
。。。
四、补充:
OC宏定义的几个数学常量(包括角度):
#define M_E
#defineM_LOG2E
#defineM_LOG10E
#defineM_LN2
#defineM_LN10
#defineM_PI
#defineM_PI_2
#defineM_PI_4
#defineM_1_PI
#defineM_2_PI
#defineM_2_SQRTPI
#defineM_SQRT2
#defineM_SQRT1_2
#defineMAXFLOAT