@SanMao
2015-08-11T16:13:32.000000Z
字数 1749
阅读 1157
事件处理
提示:iPhone开发中,要避免使用双击事件!
- (CGPoint)locationInView:(UIView *)view;
* 返回值表示触摸在view上的位置
* 这里返回的位置是针对view的坐标系的(以view的左上角为原点(0, 0))
* 调用时传入的view参数为nil的话,返回的是触摸点在UIWindow的位置
- (CGPoint)previousLocationInView:(UIView *)view;
* 该方法记录了前一个触摸点的位置
每产生一个事件,就会产生一个UIEvent对象
UIEvent:称为事件对象,记录事件产生的时刻
和类型
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event;
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event;
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event;
- (void)remoteControlReceivedWithEvent:(UIEvent *)event;
用户点击屏幕后产生的一个触摸事件,经过一系列的传递过程后,会找到最合适的视图控件来处理这个事件
找到最合适的视图控件后,就会调用控件的touches方法来作具体的事件处理
touchesBegan…
touchesMoved…
touchedEnded…
这些touches方法的默认做法
是将事件顺着响应者链条
向上传递,将事件交给上一个响应者进行处理
先将事件对象由上往下传递(由父控件传递给子控件),找到最合适的控件来处理这个事件。
调用最合适控件的touches….方法
如果调用了[super touches….];
就会将事件顺着响应者链条往上传递,传递给上一个响应者
4> 接着就会调用上一个响应者的touches….方法
如果重写一个控件的多个父控件的touchsBegan方法,那么这个控件就拥有多个事件响应者
1> 如果当前这个view是控制器的view,那么控制器
就是上一个响应者
2> 如果当前这个view不是控制器的view,那么父控件
就是上一个响应者