美文网首页
UIResponder简单研究

UIResponder简单研究

作者: ax4c | 来源:发表于2017-05-03 23:27 被阅读0次

UIResponder是响应各种事件的,之前说了UIView是UIResponder的子类,UIViewController、UIWindow、UIApplication也是UIResponder的之类。

目前iOS中的事件主要有4种,可以在UIEvent.h中查看。

typedef NS_ENUM(NSInteger, UIEventType) {
UIEventTypeTouches,
UIEventTypeMotion,
UIEventTypeRemoteControl,
UIEventTypePresses NS_ENUM_AVAILABLE_IOS(9_0),
};

一般常用的touch、motion、press,其中press是新增的3D touch,iOS 9添加的。

UIResponder根据UIResponder.h大体上可以分成四部分:

1.响应链

2.事件

3.按键命令(UIResponderKeyCommands)

4.输入视图(UIResponderInputViewAdditions)

响应链其实很好理解,可以认为是一个responder不处理某个事件,将这个事件转交nextResponder处理。顺序一般是:
子视图->父视图->视图控制器->父视图->视图控制器->UIWindow->UIApplication。

一般我们使用触摸事件,常用的方法如下:

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;
- (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;

根据方法名可以知道各自的调用时机。如果我们想画图,可以使用上面的函数,至于单击、双击、长按等手势还是使用UIGestureRecognizer更加方便。使用UIGestureRecognizer需要注意它会截取触摸事件,可能导致某些事件无法触发,需要要设置delaysTouchesBegan为 ##NO## 来调用hitTest

按键命令根据UIKeyCommand的文档可以知道是和实体键盘相关的,而输入视图根据UIInputViewController的文档可以知道是自定义键盘有关,也就是iOS 8添加的第三方键盘。

如果想深入了解iOS的事件,还需要了解一下UIViewhitTestpointInside方法以及NSRunLoop

PS.多读源码、注释以及文档还是很有好处的

相关文章

  • UIResponder简单研究

    UIResponder是响应各种事件的,之前说了UIView是UIResponder的子类,UIViewContr...

  • 如何通过View获取Controller

    UIView继承自UIResponder,UIResponder有一个实例方法- (UIResponder *)n...

  • UIResponder

    响应者对象 响应者对象—即UIResponder的实例—是组成事件处理的核心内容。许多主要的对象都是响应者对象,包...

  • UIResponder

    在iOS中UIResponder类是专门用来响应用户的操作处理各种事件的,包括触摸事件(Touch Events)...

  • UIResponder

    响应链的构成 app中,视图都是按照树状结构组织起来的,构成树状结构的同时也构成了响应链。 找到第一响应者的过程 ...

  • UIResponder

    1 nextResponder 响应链的下个响应者 上官网文档吧 class does not store or ...

  • iOS触摸事件传递

    UIResponder、UIGestureRecognizer、UIControl UIResponder UIV...

  • ios 触摸事件总结

    iOS里的触摸 UIResponder . UIGestureRecognizer 一:UIResponder :...

  • 事件传递及响应详解

    一.UIResponder 1.UIResponder简介 一个UIResponder类为那些需要响应并处理事件...

  • Touch Events and UIResponder

    Touch Events and UIResponder Touch Events 做为UIResponder的子...

网友评论

      本文标题:UIResponder简单研究

      本文链接:https://www.haomeiwen.com/subject/xlaltxtx.html