变形(transform)

 

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这个映射规则,则表里不一

变形(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];

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值