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];
    
     
  • 相关阅读:
    题解「CF204E Little Elephant and Strings」
    题解「CF1000G Two-Paths」
    消息机制及按钮实效性
    View(视图)——消息机制
    城市线程练习题后续
    城市线程练习题
    View(视图)——对话框之日期对话框和时间对话框文集
    View(视图)——对话框之进度对话框
    删除对话框练习
    拨打电话与发送短信功能
  • 原文地址:https://www.cnblogs.com/-boy/p/4166974.html
Copyright © 2011-2022 走看看