zoukankan      html  css  js  c++  java
  • UI进阶之手势识别

    手势识别

    一:使用手势识别触摸事件的原因

    如果想监听一个view上面的触摸事件,之前的做法通常是:先自定义一个view,然后再实现view的touches方法,在方法内部实现具体处理代码

    通过touches方法监听view触摸事件,有很明显的几个缺点

    (1)必须得自定义view

    (2)由于是在view内部的touches方法中监听触摸事件,因此默认情况下,无法让其他外界对象监听view的触摸事件(需要通过代理)

    (3)不容易区分用户的具体手势行为

    iOS 3.2之后,苹果推出了手势识别功能(Gesture Recognizer),在触摸事件处理方面,大大简化了开发者的开发难度

    二、手势识别器

    为了完成手势识别,必须借助于手势识别器----UIGestureRecognizer

    利用UIGestureRecognizer,能轻松识别用户在某个view上面做的一些常见手势

    UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,使用它的子类才能处理具体的手势

    UITapGestureRecognizer(敲击)

    UIPinchGestureRecognizer(捏合,用于缩放)

    UIPanGestureRecognizer(拖拽)

    UISwipeGestureRecognizer(轻扫)

    UIRotationGestureRecognizer(旋转)

    UILongPressGestureRecognizer(长按)

    三:UITapGestureRecognizer
    用法:
    1,创建手势对象 
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
    2,设置手势对象属性:

    // 连续敲击2次

    tap.numberOfTapsRequired = 2;

    // 需要2根手指一起敲击

    tap.numberOfTouchesRequired = 2;

    3,添加手势识别器到view上
    [self.iconView addGestureRecognizer:tap];
    4,监听手势的触发
    [tap addTarget:self action:@selector(tapIconView:)];

    属性介绍:

    numberOfTouchesRequired   //需要多少根手指一起敲击(默认为1根)

    numberOfTapsRequired    //需要敲击多少下(默认为1)

    四:UISwipeGestureRecognizer
    属性值:direction,判断清扫的方向,默认是right
     
    提示:swipe.direction=UISwipeGestureRecognizerDirectionDown|UISwipeGestureRecognizerDirectionUp;这种方式最多只支持1个方向的清扫。
    五:UIPanGestureRecognizer
    
     UIPanGestureRecognizer *pan=[[UIPanGestureRecognizer alloc]init];
    
    
    
    两个属性值:
    1,以控制器上的view的左上角为坐标原点
    CGPoint point=[pan locationInView:pan.view];
    
    
    2,返回的值以触摸点为原点的距离
    
    注意使用这个方法后一定要清零

    [pan setTranslation:CGPointZero inView:pan.view];

    每次移动距离都是相对原点来计算:例如第一次中点移动了1个距离。
    手指移动到2是,距离实际为2,而中点只需要移动1个距离。
     
    六:UIRotationGestureRecognizer
    属性值:rotation;
    缩度
     
     
    七:UIPinchGestureRecognizer
    属性值:scale
    同样的然也会出现累记的问题
     
     
     
    注意:1,手势器:记得清除累加的问题
    2,如果想使用多个手势操作,使用代理
    3,imageview默认不会跟用户交互
     
     
     
    CGPoint point1=[pan translationInView:pan.view];
    
     
  • 相关阅读:
    SQL SERVER 错误:查询处理器用尽了内部资源,无法生成查询计划。这种情况很少出现,只有在查询极其复杂或引用了大量表或分区时才会出现。请简化查询。如果您认为该消息的出现纯属错误,请与客户支持服务部门联系,了解详细信息。
    大数据第十五周 Spark编程基础实例——wordCount编程
    Qt判断文件或文件夹是否存在
    windows解决访问Github慢
    朴素贝叶斯算法-非模型
    Qt自绘系列
    QStackedWidget动态多界面
    C++判断两个指针指向的对象是否相同
    Qt之自绘控件
    Python2.7安装OpenCV错误:TypeError: ‘NoneType’ object is not iterable
  • 原文地址:https://www.cnblogs.com/-boy/p/4166974.html
Copyright © 2011-2022 走看看