响应链和手势
来源:互联网 发布:网易云 播放失败 mac 编辑:程序博客网 时间:2024/04/30 06:38
Cocoa Touch没有公开任何代表手势的类或结构。一个手势就是一个动作,运行中的应用程序可以从用户输入流知道是否出现某种手势。
手势识别器(UIGestureRecognizer)是一个对象,它知道如何观察用户生成的事件流,并识别用户何时以与预定义的手势相匹配的方式进行了触摸和拖动。
1. 响应事件
响应者:以UIResponder作为超类的任何类都是响应者。UIView是UIResponder的子类,UIControl是UIView的子类,所以所有视图和所有空间都是响应者。UIViewController也是UIResponder的子类,它也是响应者,(UINavigationController & UITabBarController也是)。如果第一个响应者不处理某个特殊事件(如某个手势),那么它将事件传递到响应链的下一级。如果该链中的下一个对象响应此特殊事件,则处理该事件,并停止该事件的传递。如果此事件在整个响应链都没有对象来处理,则该事件被丢弃。
具体理解响应者链:
第一响应者几乎都是视图或者控件,并且首先对事件进行响应。如果第一响应者不处理该事件,那么它将该事件传递给其视图控制器。如果此视图控制器不处理该事件,那么该事件被传递给第一响应者的父视图。如果父视图没有响应,该事件传递给父视图控制器(如果有)。
该事件沿着每个视图的层次结构继续前进,然后该视图的控制器获得处理该事件的机会。如果一直没有对象对该事件进行处理,该事件将传递给应用程序的窗口。如果窗口也不处理,事件将传递到应用程序的对象实例UIApplication。如果UIApplication也不处理,最后就是应用程序委托。应用程序委托是UIResponder的子类的话,那应用程序就尝试将任意尚未处理的事件传递给它。如果不是,或者不处理,事件将被丢弃。
2.转发事件:保持响应者链的活动状态
- (void)respondToFictionalEvent:(UIEvent *)event{ if ([self shouldHandleEvent:event]) { [self handleEvent:event]; } else { [[self nextResponder] respondToFictionalEvent:event]; }}
如果当前对象不处理事件的响应,我们需要确保将该事件推回到响应者链中。
3.触控体系结构
手势沿着响应者链传递,并且嵌入在事件中。所以响应者链的对象中需要包含代码来处理手势事件。这意味着我们可以将代码嵌入UIView的子类中,也可以嵌入UIViewController中。
4.4个手势通知方法
touchesBegan:withEvent:
touchesMoved:withEvent:
touchesEnded:withEvent:
touchesCancelled:withEvent: 当发生某些事件(如来电)导致手势中断时,该方法被调用
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ //touches中的每个对象都是一个UITouch事件 NSUInteger numTaps = [[touches anyObject] tapCount];//快速连续轻击屏幕次数 NSUInteger numTouches = [touches count];//同时轻击屏幕的手指数 NSSet *myTouches = [event touchesForView:self.view];//获得特定视图的触摸touches CGPoint point = [touch locationInView:self];//特定手指的位置}
- 响应链和手势
- iOS 事件和响应者链,手势
- 关于手势和响应事件
- tableView和gesture手势冲突(响应链问题)
- 28-手势 响应者链 手势识别器
- 手势识别(三)2种添加手势方法和如何响应手势
- Ui:响应者链,手势,摇动事件
- IOS开发UI系列之事件、触摸、手势和响应者链
- 在view上响应手势和touch事件
- 手势和点击谁先响应?<优秀博客推荐>
- IOS-UI高级 事件的响应和手势识别器
- 响应者 手势
- 手势响应事件优先级
- IOS 手势、手势响应器UIGestureRecognizer
- UIimageview添加手势,无法响应手势事件
- IOS 手势、手势响应器UIGestureRecognizer
- iOS手势之 响应上下左右滑动手势
- IOS 手势、手势响应器UIGestureRecognizer
- 的付款给你快递费那个地方
- 8.Swift教程翻译系列——控制流之条件
- 【转】 ids for this class must be manually assigned before calling save()
- Ant
- Android音量调节的实现
- 响应链和手势
- IOS 发布企业级应用的方法
- SGML简单语法
- 风格反对改革
- Python第一天:初始Python
- Ubuntu环境下卸载和安装QQ/TM(wine-qq201X)
- Javascript 函数之小分析
- Leetcode: 4Sum
- 如何打开打开xml文件的方法和软件。