码迷,mamicode.com
首页 > 移动开发 > 详细

iOS基础-事件处理、响应者链

时间:2015-09-26 15:55:23      阅读:444      评论:0      收藏:0      [点我收藏+]

标签:

 1 //触摸四个方法
 2 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
 3     UITouch *touch = [touches anyObject];
 4     CGPoint point = [touch locationInView:self];
 5     NSLog(@"V开始触摸  %@",NSStringFromCGPoint(point) );
 6     
 7     
 8     
 9 }
10 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
11     
12     UITouch *touch = [touches anyObject];
13     CGPoint point = [touch locationInView:self];
14     NSLog(@"MVC 滑动  %@",NSStringFromCGPoint(point) );
15     float  a = point.x;
16     float b = point.y ;
17     float c = point.x;
18     self.backgroundColor = [UIColor colorWithRed:a/375.0 green:b/667.0 blue:c/375.0 alpha:1];
19     self.frame = CGRectMake(100, 100, a, b);
20     
21     
22 }
23 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
24     UITouch *touch = [touches anyObject];
25     CGPoint point = [touch locationInView:self];
26     NSLog(@"V停止触摸%@",NSStringFromCGPoint(point));
27 }
28 - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{
29     NSLog(@"V触摸取消");
30 }
 1 - (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event{
 2     NSLog(@"开始摇动");
 3 }
 4 
 5 - (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event{
 6     NSLog(@"取消摇动");
 7 }
 8 
 9 - (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event{
10     NSLog(@"停止摇动");
11     
12     
13     a= a +1;
14     
15     for (int i = 0; i < 7; i++) {
16         UILabel *v = (UILabel *)[self.view viewWithTag:a];
17         v.text = [NSString stringWithFormat:@"%d",arc4random()  % 7];
18         v.font =[UIFont fontWithName:@"DBLCDTempBlack" size:65];
19         v.textAlignment = NSTextAlignmentCenter;
20         
21         if (a == 7) {
22             v.text = @"??";
23             
24             
25         }
26     }
27     
28     
29     
30     
31     
32     
33 }

 

 

 

事件处理的事件传递

简介:

发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件 队列中,UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理,通常,先发送事件给应用程序的主窗口(keyWindow)

UIView不接受触摸事件的三种情况:

不接收用户交互
userInteractionEnabled = NO

隐藏
hidden = YES

透明
alpha = 0.0 ~ 0.01

提示:UIImageView的userInteractionEnabled默认就是NO,因此UIImageView以及它的子控件默认是不能接收触摸事件的

事件传递的详细过程:

主窗口会在视图层次结构中找到一个最合适的视图来处理触摸事件,但是这仅仅是整个事件处理过程的第一步 找到合适的视图控件后,就会调用视图控件的touches方法来作具体的事件处理
touchesBegan…
touchesMoved…
touchedEnded… 这些touches方法的默认做法是将事件顺着响应者链条向上传递,将事件交给上一个响应者进行处理

 

 

 

示例:

技术分享

响应者链条

技术分享

事件传递的完整过程

先将事件对象由上往下传递(由父控件传递给子控件),找到最合适的控件来处理这个事件。 调用最合适控件的touches….方法 如果调用了[super touches….];就会将事件顺着响应者链条往上传递,传递给上一个响应者 接着就会调用上一个响应者的touches….方法

如何判断上一个响应者

如果当前这个view是控制器的view,那么控制器就是上一个响应者 如果当前这个view不是控制器的view,那么父控件就是上一个响应者

响应者链条的事件传递过程

如果view是控制器的view,就传递给控制器;如不是,则将其传递给它的父视图 在视图层次结构的最顶级视图,如果也不能处理收到的事件或消息,则其将事件或消息传递给window对象进行处理 如果window对象也不处理,则其将事件或消息传递给UIApplication对象 如果UIApplication也不能处理该事件或消息,则将其丢弃

iOS基础-事件处理、响应者链

标签:

原文地址:http://www.cnblogs.com/dingjianjaja/p/4840781.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!