wuxiios吧 关注:54贴子:877
  • 7回复贴,共1

20141112--手势解锁--触摸事件的传递--响应者链条--手势识别

只看楼主收藏回复


哎!现在没有工作经验连面试的机会都没有,不过时刻准备自己的知识,量变总会引起质变


IP属地:江苏1楼2014-11-12 21:06回复
    二楼目录贴


    IP属地:江苏2楼2014-11-12 21:07
    回复
      手势解锁(图案)
      ------圆的选中



      ------九宫圆的解锁
      1,添加九个圆(uibutton)

      ---抽出方法(获取触摸点和判断触摸点是否在圆中)

      2,判断触摸点有没有在圆中,如果有就点亮圆
      3,在手指滑动过程中判断触摸点有没有在园中,如果有就点亮圆,如果没有就和当前点连线

      4,连线


      IP属地:江苏3楼2014-11-12 21:53
      回复
        今天先到这吧,明天补上


        IP属地:江苏4楼2014-11-12 21:54
        回复
          触摸事件的传递(uiview)
          ---------最重要的几句话
          1主窗口会在视图层次结构中找到一个最合适的视图来处理触摸事件,这也是整个事件处理过程的第一步
          ••如何找到最合适的控件来处理事件?
          Ø自己是否能接收触摸事件?
          Ø触摸点是否在自己身上?
          Ø从后往前遍历子控件,重复前面的两个步骤
          Ø如果没有符合条件的子控件,那么就自己最适合处理
          2如果父控件不能接收触摸事件,那么子控件就不可能接收到触摸事件(掌握)

          ---------UIView不接收触摸事件的三种情况
          1,不接收用户交互
          userInteractionEnable = NO
          2,隐藏
          hidden = YES
          3,透明
          alpha = 0.0-0.01
          提示:UIImageView的userInteractionEnabled默认就是NO,因此UIImageView以及它的子控件默认是不能接收触摸事件的


          IP属地:江苏5楼2014-11-13 16:31
          回复
            响应者链条
            ------------含义解释
            •用户点击屏幕后产生的一个触摸事件,经过一些列的传递过程后,会找到最合适的视图控件来处理这个事件•
            •找到最合适的视图控件后,就会调用控件的touches方法来作具体的事件处理
            ØtouchesBegan…
            ØtouchesMoved…
            ØtouchedEnded…
            •这些touches方法的默认做法是将事件顺着响应者链条向上传递,将事件交给上一个响应者进行处理
            之所以默认是因为其方法中默认具有这句话: [super touchesBegan:touches withEvent:event];(其含义就是向上传递)

            --------------响应者链条的事件传递过程
            1.如果view的控制器存在,就传递给控制器;如果控制器不存在,则将其传递给它的父视图
            2.在视图层次结构的最顶级视图,如果也不能处理收到的事件或消息,则其将事件或消息传递给window对象进行处理
            3.如果window对象也不处理,则其将事件或消息传递给UIApplication对象
            4.如果UIApplication也不能处理该事件或消息,则将其丢弃


            IP属地:江苏6楼2014-11-13 16:39
            回复
              监听触摸事件的做法
              --------------方案一
              方案:
              Ø自定义一个view
              Ø实现view的touches方法,在方法内部实现具体处理代码
              缺点:
              Ø必须得自定义view
              Ø由于是在view内部的touches方法中监听触摸事件,因此默认情况下,无法让其他外界对象监听view的触摸事件
              Ø不容易区分用户的具体手势行为
              为了解决方案一的缺点,所以引出下楼------手势


              IP属地:江苏7楼2014-11-13 16:47
              回复
                手势识别器---------UIGestureRecognizer
                •UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,使用它的子类才能处理具体的手势
                ØUITapGestureRecognizer(敲击)
                ØUIPinchGestureRecognizer(捏合,用于缩放)
                ØUIPanGestureRecognizer(拖拽)
                ØUISwipeGestureRecognizer(轻扫)
                ØUIRotationGestureRecognizer(旋转)
                ØUILongPressGestureRecognizer(长按)
                •每一个手势识别器的用法都差不多,比如UITapGestureRecognizer的使用步骤如下
                Ø创建手势识别器对象
                UITapGestureRecognizer *tap= [[UITapGestureRecognizeralloc] init];
                Ø设置手势识别器对象的具体属性
                // 连续敲击2次
                tap.numberOfTapsRequired = 2;
                // 需要2根手指一起敲击
                tap.numberOfTouchesRequired = 2;
                Ø添加手势识别器到对应的view上
                [self.iconViewaddGestureRecognizer:tap];
                Ø监听手势的触发
                [tap addTarget:selfaction:@selector(tapIconView:)];
                ---------------长按手势识别器

                ----------------轻扫手势识别器


                IP属地:江苏8楼2014-11-13 16:55
                回复