zoukankan      html  css  js  c++  java
  • 响应者对象


    响应者对象:

    • 响应者对象是一个能接收并处理时间的对象,UIResponser 是所有响应者对象的基类
    • 该基类定义了一系列事件处理的相关方法,如触摸事件,button点击事件等
    • UIApplication,UIView,UIViewController 都是继承自 UIResponser,所有这些类的实例都是响应者对象
    • 如果 hit-test 视图不处理收到的事件消息,UIKit 则将事件转发到响应者链的下一个响应者,看其能否对该消息进行处理

    触摸事件的处理:

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

    • - (void)touchesBegan:(NSSet *)toucheswithEvent:(UIEvent *)event

      一根或者多根手指开始触摸屏幕
    • -(void)touchesMoved:(NSSet *)toucheswithEvent:(UIEvent *)event

      一根或者多根手指在屏幕上移动(随着手指的移动,会持续调用该方法)
    • -(void)touchesEnded:(NSSet *)toucheswithEvent:(UIEvent *)event

      一根或多根手指离开屏幕
    • -(void)touchesCancelled:(NSSet *)toucheswithEvent:(UIEvent *)event

      在触摸操作结束前,某个系统事件(例如有电话打进来)打断了触摸过程

    由此,,我想到,之前点击屏幕空白处隐藏键盘是通过将view的基类修改为UIControl,然后实现View的Touch Up Inside事件实现的,,同样原理,可以直接将隐藏键盘的代码写在touch事件里应该也可以同样实现键盘隐藏的效果。


    触摸事件的处理

    • 上述的4个方法都有个 UIEvent 的参数,通过 UIEvent 可以得到事件的类型和产生时间,以及当前处于活动状态的所有触摸操作,但是,通常会使用UITouch 对象而不是 UIEvent 对象来处理触摸事件
    • 当用户触摸屏幕时,系统会创建一个 UITouch 实例,并将该对象和触摸屏幕的那根手指关联。UITouch 保存着手指在屏幕上得触摸位置,当手指移动时,系统会更新同一个UITouch 对象(而不是去创建另外的多个UITouch对象),使之能够一直保存该手指在屏幕上得当前位置,当手指离开屏幕时,系统会取消响应的UITouch对象
    • UITouch 对象还会保存一些其他信息,比如,手指的前一个位置、手指按下屏幕的次数(tapCount,可以用来判断单击还是双击事件)
    • touches参数返回的是一个NSSet * 对象,之所以是NSSet * 对象是因为多点触摸的需要(单点触摸就不需要返回一个集合对象了),默认是不支持多点触摸的,要把视图的multipleTouchEnable 属性设置为YES ,通过touches.count可以验证多点触摸。





  • 相关阅读:
    【SQL】182. Duplicate Emails
    【SQL】181. Employees Earning More Than Their Managers
    【SQL】180. Consecutive Numbers
    【SQL】178. Rank Scores
    【SQL】177. Nth Highest Salary
    如何处理postman Self-signed SSL certificate blocked错误
    Radio checked 属性
    转成百分比
    内建函数
    队列
  • 原文地址:https://www.cnblogs.com/riskyer/p/3329216.html
Copyright © 2011-2022 走看看