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];
    
     
  • 相关阅读:
    GetForegroundWindow 与 GetActiveWindow 的区别 回复 "delphier" 的问题
    给 TStringGrid 添加鼠标拖动功能 回复 "dxx" 的问题
    Delphi 的编译指令(3): 常用的预定义条件标识符
    Delphi 的编译指令(1): $DEFINE、$UNDEF、$IFDEF、$ELSE、$ENDIF
    用多媒体库 Bass.dll 播放 mp3 [17] : 如何从内存流播放 回复 "小李子子" 的问题
    Delphi 的编译指令(4): 编译指令全表(未完)
    窗口跟随 回复 "heyongan" 的问题
    字符串转换到指定格式的宽字符 回复 "厨师" 的问题
    Dll 使用 PChar 参数的小例子 回复 "linximf" 的问题
    上周热点回顾(5.286.3)
  • 原文地址:https://www.cnblogs.com/-boy/p/4166974.html
Copyright © 2011-2022 走看看