1.变形(transform)
1.1 什么是变形?
视图外观的改变过程,其中包括位置的改变 大小的改变 角度的改变,把这个 发生了变化的过程叫做变形
1.2 变形包含的改变项
位移 translation
缩放 scale
旋转 rotation
1.3 如何实现视图的变形呢?
通过修改view的 transform属性即可
1.4 transform属性
a.类型: CGAffineTransform结构体类型,此结构体是一个3 X 3 的矩阵,其中可改变的有6个数字,只要改变这6个中的某一个或某几个数字,那么把这个值赋给transform属性就可以完成变形
b.如何快速的修改这个矩阵,从而实现变形?
利用系统提供的6个函数,可以快速的生成CGAffineTransform类型的结构体变量
第一组:
CGAffineTransformMakeTranslation()
CGAffineTransformMakeScale()
CGAffineTransformMakeRotation()
第二组:
CGAffineTransformTranslate()
CGAffineTransformScale()
CGAffineTransformRotate()
/ 通过系统提供的一个常量,将transform恢复
self.imageView.transform = CGAffineTransformIdentity;
// 实现位移的变形效果
// 有make的函数是基于没有变形之前的状态计算一个数值
self.imageView.transform = CGAffineTransformMakeTranslation(20, 20);
// 没有make的函数,是基于传入的transform属性的当前状态进行计算,得到一个数值,所以,效果就会累加
self.imageView.transform = CGAffineTransformTranslate(self.imageView.transform, 20, 20);
// 实现缩放的变形效果
self.imageView.transform = CGAffineTransformMakeScale(1.1, 1.1);
self.imageView.transform = CGAffineTransformScale(self.imageView.transform, 1.1, 1.1);
// 实现旋转的变形效果
self.imageView.transform = CGAffineTransformMakeRotation(M_PI_4);
self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, M_PI_4);
2.视图中与坐标系有关的几个属性的作用
2.1 frame
a.什么是frame
类型: CGRect 结构体类型
作用: original(x,y)定位子视图左顶点在父视图中的位置,size(width , height)以及在父视图中占据的空间大小
b.直接修改frame
bounds : YES
center: YES
transform:NO (与期待不符)
c.什么时候用frame
当需要将一个视图添加到另一个视图中时,需要使用frame来进行定位
2.2 bounds
a.什么是bounds
类型:CGRect 结构体 (original size)
作用:original用于记录视图自己的坐标系的圆点起始值,默认original都是(0,0),size用于记录视图自己的大小
b.直接修改bounds
frame: YES
center: NO
transform: NO
c.什么时候用bounds
如果需要变换视图内部子视图的位置,则可以通过修改bounds的original,完成坐标系基准点的修改
如果需要使用某视图的大小,尺寸数据,则读取bounds的size即可
默认情况下,bounds的x和y永远是0,又由于尺寸多大那么占据的父视图空间就有多大,所以,在没有变形以前,bounds中的size和frame中的size永远相等
2.3 center
a.什么是center
类型: CGPoint 结构体类型
作用: 标识当前视图在父视图中的位置,记录的是实体图正中间的点位于父视图坐标系下的位置
b.直接修改center
frame: YES
bounds:NO
transform:NO
c.什么时候用center
如果需要移动视图的位置,那么可以通过修改center实现位移
2.4 transform
a.什么是transform
类型:CGAffineTransform 结构体类型
作用:用于记录视图发生了的位移 旋转 缩放 这个变化对应的数据
b.直接修改transform
frame : YES
bounds:NO
center:NO
c.什么时候用transform
需要修改视图表现出来的大小 位置 角度这些效果时,可以使用transform
结论:
系统将视图分成两个空间,一个是看的见的用户空间,一个是看不见的设备空间,frame属于用户空间, center和bounds属于设备空间,transform用于记录将设备空间中的视图如何映射表现到用户空间上
在没有修改transform这个映射规则时,表里如一
如果修改了transform这个映射规则,则表里不一
3.触控(UITouch)
3.1 什么是触控?
系统将用户的触屏的动作转换成了点坐标
3.2有什么用?
跟踪触点位置,实现类似于画图 画板的涂鸦 甚至于一些拖拽动作
3.3 如何使用UITouch?
情况一:
自定义一个类,继承自UIView,重写UIView中的touchesBegan touchesMoved touchesEnded方法,就可以捕获到触控动作
情况二:
如果需要捕获针对控制器自带的那个视图的触控动作,重写控制器的touchesBegan touchesMoved touchesEnded 方法即可
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"began");
//将touches集合中唯一的那个触点对象取出
UITouch *touch = [touches anyObject];
//获取触点的坐标
CGPoint point = [touch locationInView:self];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"move");
//将touches集合中唯一的那个触点对象取出
UITouch *touch = [touches anyObject];
//获取触点的坐标
CGPoint point = [touch locationInView:self];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
//将touches集合中唯一的那个触点对象取出
UITouch *touch = [touches anyObject];
}