• 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

     

  • 相关阅读:
    Jquery揭秘系列:实现$.fn.extend 和$.extend函数
    小谈Jquery框架
    js实现可拖动Div
    WebApp 九宫格抽奖简易demo
    原生js实现autocomplete插件
    扩展RadioButtonListFor和CheckBoxListFor
    关于js的回调函数的一点看法
    原生js实现fadein 和 fadeout
    QlikView sheet权限
    asp.net MVC 文件流导出Excel
  • 原文地址:https://www.cnblogs.com/katydid/p/4314631.html
Copyright © 2020-2023  润新知