zoukankan      html  css  js  c++  java
  • 触摸事件与手势识别

    一、触摸事件

      通常使用触摸事件开始时,都是针对单点触摸。如果有移动需求,譬如拖拽控件的位置,此时需要考虑使用手势,而不要使用触摸事件方法。因为:触摸事件的方法中,只有当前的手指点的位置,以及前一个手指点的位置,没有两点间移动的速度。 在开发拖动控件的程序时,通常会考虑在手指离开屏幕时,让控件按照惯性及方向移动一小段距离,或者其他的特效。在绝大多数的开发中,通常在touchesBegan方法中处理用户触摸!   

       以下三种情况是能够接收用户触摸的条件 :

      

      1) self.userInteractionEnabled = YES;  允许接收用户响应  

      2) self.hidden = NO;   只有现实的视图才能接收用户触摸

      3) self.alpha > 0.01;   视图的透明度一定要可见    

      触摸事件的方法

       UIView是UIResponter的子类,可以覆盖下列4个方法处理不同的触摸事件

        1.一根或者多跟手指开始触摸屏幕

      - (void)touchesBegan:(NSSet *)touchesWithEvent:(UIEvent *)event

      2.一根或者多跟手指在屏幕上移动(随着手指的移动,会持续调用该方法)

      - (void)touchesMoved:(NSSet *)touchesWithEvent:(UIEvent *)event

      3.一根或多跟手指离开屏幕

      - (void)touchesEnded:(NSSet *)touchesWithEvent:(UIEvent *)event

      4.触摸结束前,每个系统事件(例如电话呼入)会打断触摸过程

      - (void)touchesCancelled:(NSSet *)touchesWithEvent:(UIEvent *)event

      获取触摸集合中任意一个触摸对象,对于单点触摸,直接用就可以 UITouch *touch = [touches anyObject];

        获取触摸在当前视图的位置 CGPoint location = [touch locationInView:self.view];

        获取触摸在当前视图的前一点位置 CGPoint preLocation = [touch previousLocationInView:self.view];

    二、手势识别

      1. 使用手势识别的步骤  

      (1) 纯手码      

      1> 实例化手势识别     - (id)initWithTarget:(id)target action:(SEL)action;  

      2> 设置手势识别属性,手指的根数,点按的次数等    

      3> 将手势识别附加到指定的视图      addGestureRecognizer    

      4> 编写监听方法

     

      (2) Storyboard  

      1> 直接将手势对象,拖拽到需要监听的控件上   

      2> 连线IBAction,编写监听方法 

      2. 六种手势识别方法解析     

      1> UITapGestureRecognizer——点按手势(离散手势,其他手势都是连续手势)     

       属性:   numberOfTapsRequired——点击次数,单击双击     

           numberOfTouchesRequired——手指根数          

      2> UILongPressGestureRecognizer—— 长按手势(属性不建议修改)         

        3> UIPanGestureRecognizer——拖动手势            

      属性:不常用     

      方法: 在视图中拖动的距离      - (CGPoint)translationInView:(UIView *)view;

      在视图中拖动的速度,通常可用于模拟惯性,需要一些物理方面的计算      - (CGPoint)velocityInView:(UIView *)view;        

      4> UIPinchGestureRecognizer—— 捏合手势          

      属性: scale —— 比例      velocity——捏合速度,不常用        

      5> UIRotationGestureRecognizer——旋转手势      

       属性: rotation——旋转角度      velocity——旋转速度,不常用       

      6> UISwipeGestureRecognizer—— 轻扫手势,通常添加到根视图上        

       属性 : numberOfTouchesRequired—— 参与轻扫手势的手指根数      direction —— 轻扫的方向          

     

      提示:     

      1) 如果要检测几个方向的轻扫,需要分别实例化几个轻扫手势     

      2) 轻扫手势虽然是连续手势,但是不需要去处理UIGestureRecognizerStateChanged状态,因为是在手指离开屏幕后,该手势才被识别。在实际开发中,关于连续性手势的状态判断,需要判断手势的被取消和失败两个状态,在iPad开发中尤为重要!  

      if (UIGestureRecognizerStateCancelled == recognizer.state || UIGestureRecognizerStateFailed == recognizer.state)

      {  

           NSLog(@"手势失败");

      }

    三、手机摇晃监听

     步骤:

      1. 成为第一响应者是监听摇晃事件的关键!在iOS7中可以不指定,但是在iOS6中一定要指定

       - (BOOL)canBecomeFirstResponder  {    

         return YES;

       }  

      2. 在视图出现时,让视图控制器成为第一响应者

      3. 在视图消失时,让视图控制器注销第一响应者身份

      4. 监听摇晃运动事件  

     

      摇晃开始事件

      - (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {  

           if (motion == UIEventSubtypeMotionShake)   {    

               NSLog(@"摇晃了");    

      }

      }

  • 相关阅读:
    [转]对Lucene PhraseQuery的slop的理解
    Best jQuery Plugins of 2010
    15 jQuery Plugins To Create A User Friendly Tooltip
    Lucene:基于Java的全文检索引擎简介
    9 Powerful jQuery File Upload Plugins
    Coding Best Practices Using DateTime in the .NET Framework
    Best Image Croppers ready to use for web developers
    28 jQuery Zoom Plugins Creating Stunning Image Effect
    VS2005 + VSS2005 实现团队开发、源代码管理、版本控制(转)
    禁止状态栏显示超链
  • 原文地址:https://www.cnblogs.com/swcheng/p/3640641.html
Copyright © 2011-2022 走看看