IOS之UIKit_Day16

day16

回顾:

          贴图和美化

1. 程序中的图片

          根据设备的不同准备不同大小的图片1X  2X  3X 的多套图片 加到图片的资源库中,系统会自动加载。

          第一类:Applicon和LaunchScreen图片,根据系统的提示,加载到指定大小的图片

          第二类:应用程序中的图片利用9切片的技术调整大小(不写代码)

2. 针对程序中的美化

          2.1 控件的美化

          2.2 颜色风格的美化(tintColor UIAppearance

3. UINavigationBar美化

          3.1 三部分的美化

          3.2 背景色(barTintColor

          3.3 背景图(竖屏:图片的高度:64横屏:52点)

          3.4 导航的隐藏

          3.5 状态栏的风格设置和状态栏的隐藏

4. UITableViewCell

          实现步骤:

                   a.修改TableView的分割线None

                   b.修改TableView的背景色为clearColor

                   c.cell.backgroundView=[[UIImageView alloc]initVithImage:[UIIamageimageName:@"list"]];

 

今天:

1. 手势:

1.1 什么是手势

          用户在View上的一些触屏的操作,诸如 滑动 捏合

1.2 手势的分类

          1. 一次性的手势

                   触屏的动作以后,方法只会响应一次如:点击  解锁

          2. 连续性点击

                   触屏动作发生以后,方法会连连续响应多次如长按  捏合 移动 旋转

1.3 手势的本质

          本质是一个对象,用户针对视图发生了一定的动作之后,系统会检测到检测到该动作,并根据具体的动作创建不同种类的手势对象,该对象只会存储于动作有关的一些数据,如触屏动作的坐标,活动的快慢移动的距离

          如果发生的是一次性手势动作,那么就调用一次方法如果发生的是连续性手势动作,那么就多次调用响应方法。

1.4 如何使用手势

          step1:创建手势对象

          step2:设置与该手势相关的属性

          step3:将手势对象与需要检测的视图关联在一起

1.5 具体的手势类

          所有的手势的父类:UIGestureRecognizer

          六种手势:

          UITapGestureRecognizer点击一下屏幕

          UIPinchGestureRecongnizer捏合屏幕

          UISwipeGestureRecongnizer轻扫屏幕

          UIPanGestureRecongnizer移动手势

          UILongPressGestureRecongnizer长按手势

          UIRotationGestureRecongnizer旋转手势

2. 具体的使用

          2.1UITapGestureRecognizer (一次性手势)

        常用属性:

          .numberOfTapsRequired设置点击数

          .numberOfTouchesRequired设置触点数

          CGPointlocation=[gr locationInView:self.view];获取点击动作时,触点的绝对坐标

 

          2.2UISwipeGestureRecognizer(一次性手势)

          常用属性:

                   .numberOfTouchesRequired触点的个数

                   .direction轻扫的方向

          注意:direction属性为枚举值,并且是可以进行组合的枚举值,多个枚举值之间使用 “|”按位“或”进行运算。

          补充:1<<?    表达式的含义是:对于二进制的数字1进行向左移位,符号右侧是几,就向左移动几位。

如果想实现上下左右滑动  那么 就要使用两个UISwipeGestureRecongizer

 

2.3 UILongPressGestureRecognizer(连续性手势)

          常用属性:

          //设置最少按下的持续时间

   longGR.minimumPressDuration = 1;

 

2.4 UIPinchGestureRecognizer(连续性手势,捏合)

          CGFloatscale = gr.scale; //手势的变化比率,向外扩展时,为大于1的数,向内捏合时,为小与1的数

   CGFloatvelocity = gr.velocity;//手势的变化速率,向外扩展时,为正数,向内捏合时,为负数

         以上两个属性不是用来设置的,而是在手势发生时用来读取的。

          练习:       

                   界面上 有一个UITextView,看小说,增加手势识别,如果快速扩,小说出现,快速捏,小说隐藏,速度不快时,代表放大或缩小小说的文字大

                   text.View.editable=NO;隐藏交互

                   textView.hidden=NO;设置隐藏

         

          2.5UIRotationGestureRecognizer (连续性手势,旋转)

                   常用属性:

                   CGFloatrotation = gr.rotation;

                   代表手势旋转的弧度。顺时针旋转时,为正数,逆时针旋转时为负数

         

          2.6UIPanGestureRecognizer(连续性手势,拖动)

          常用属性:

          //获取移动到的位置在视图坐标系中的绝对位置

    CGPointlocation = [gr locationInView:self.view];

    //获取移动到的新位置相对于移动动作起始点的坐标的横纵向的偏移

    CGPointtranslation = [gr translationInView:self.view];

 

3.变形(Transform

3.1 什么是变形

          视图发生了位移,缩放。旋转这样的变化

3.2 如何实现变形

          可以通过修改视图对象的.transform属相完成变化的效果

          位移:translation

          缩放:scale

          旋转:rotation

3.3 transform属性

          类型:CGAffineTransForm类型的结构体

          结构体中包含了6个可变的值和3个定值组成的3*3的矩阵,修改了6个数中的某一个或者某几个就可以实现变形,实际上着6个数很难计算,借助于一些系统的API实现数值的改变

3.4 修改transform属性的API

          修改位移:CGAffineTransformMakeTranslation();

                                  CGAffineTransformTranslate();

          缩放变换:CGAffineTransformMakeScale()

                                 CGAffineTransformTranslate();

 

          旋转:                 CGAffineTransformMakeRotation()

                                      CGAffineTransformRotate()

         

重点注意:变形与自动布局是冲突的,所以在使用变形时一定要先关闭AutoLayout,不关闭的,产生的效果无法预计

 

          界面创建后,没有做任何变形之前系统会将每一个试图的当前transform记录倒一个常量中CGAffineTransformIndentity当使用MakeXX()方法进行反射变换,计算新的矩阵,都是基于这个常量进行变形计算的。当使用没用Make的那组方法时,每次计算新的矩阵都是以传入的transform的值作为基准

 

          3.5TransForm属性的初始化常量

                   CGAffineTransfomIdentity

4.手势+变形

          4.1UIPanGestureRecongnizer+实现位移:

                   a.创建UIPanGestureRecongnizer的实例

                   UIPanGestureRecognizer*PanGR=[[UIPanGestureRecognizer alloc]initWithTarget:selfaction:@selector(pan:)];

                   b.添加到视图当中

    [self.viewaddGestureRecognizer:PanGR];

          c.在pan方法中得到偏移量

          CGPointtranslation=[GR translationInView:self.View];

          d.设置imageView的移动中点

          GPointcenter = CGPointMake(self.imageView.center.x+translation.x,self.imageView.center.y+translation.y);

   self.imageView.center = center;

     e.设置该次偏移的偏移量为zero

            [GRsetTranslation:CGPointZero inView:self.View];

 

  4.2 使用pinch手势实现缩放变形

          a.创建实例

                   UIPinchGestureRecognizer*pinGR=[[UIPinchGestureRecognizer alloc]initWithTarget:selfaction:@selector(pin:)];

    [self.viewaddGestureRecognizer:pinGR];     

          b.在方法中实现   self.imageView.transform=CGAffineTransformScale(self.imageView.transform,GR.scale,GR.scale);

          设置缩放起点

          GR.scale=1;//不设置缩放量 和缩放手势不一致

         

   4.3  使用Rotation手势实现旋转变形

          a.创建Rotation实例

          b.在方法中实现

             self.imageView.transForm=CGAffineTransFprmRotate(self.imageView.transForm,GR.rotation)

              GR.rotation=0;不设置时旋转后和旋转量不一致

         

     4.4 多手势共存的问题:

                   解决步骤:

                   a.设置各个手势的代理

                   b.实现一个方法

          -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizershouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer*)otherGestureRecognizer{

    return YES;

}

 

【综合练习】

图片查看器:

1》使用代码向View中添加一个UIImageView对象,UIImageView的大小和图片大小一致,找一张大图

2》使用center属性将Imageview移到到屏幕的中央

3》使用transform属性将imageview缩放倒屏幕刚好能显示的下正常图片的内容,且保存宽高比

4》对imageView增加rotation手势,支持图片的旋转

5》对imageView增加pinch手势,支持图片的缩放

6》对mageView增加pan手势,支持图片的移动

7》对imageView增加tap手势,床架回到第3

注意:手势不要添加到self.view添加到图片上,记得打开imageView的用户交互(.userInteractionEnable=YES

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。