触摸事件,响应者链和手势

1.触摸事件

 1 #import "ViewController.h"
 2 @interface ViewController ()
 3 @property (strong,nonatomic) UILabel *simple;
 4 @end
 5
 6 @implementation ViewController
 7
 8 - (void)viewDidLoad {
 9     [super viewDidLoad];
10     // Do any additional setup after loading the view, typically from a nib.
11     self.view.backgroundColor = [UIColor whiteColor];
12     self.simple = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
13     self.simple.center = self.view.center;
14     self.simple.backgroundColor = [UIColor magentaColor];
15     //设置圆角
16     self.simple.layer.cornerRadius = 20;
17     self.simple.layer.masksToBounds = YES;
18 //    self.simple.layer.shadowOffset = CGSizeMake(4, 5);
19 //    self.simple.layer.shadowColor = [UIColor blackColor].CGColor;
20 //    self.simple.layer.borderColor = [UIColor magentaColor].CGColor;
21 //    self.simple.layer.borderWidth = 5;
22     [self.view addSubview:self.simple];
23 }
24 //开始触摸
25 -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
26 {
27 #define KWidth self.view.bounds.size.width
28 #define KHeight self.view.bounds.size.height
29 #define KMax 300
30 #define KMin 30
31     self.simple.backgroundColor = [UIColor yellowColor];
32    //随机大小
33     CGFloat side = arc4random()%(KMax - KMin + 1) +KMin;
34     self.simple.bounds = CGRectMake(0, 0, side, side);
35     self.simple.layer.cornerRadius = side / 2;
36     self.simple.layer.masksToBounds = YES;
37
38     //随机位置
39     CGFloat x = arc4random()%(NSInteger)(KWidth - 50 + 1) + 50;
40     CGFloat y = arc4random()%(NSInteger)(KHeight - 50 + 1) + 50;
41
42     self.simple.center = CGPointMake(x, y);
43
44
45     NSLog(@"我要开始摸了");
46 }
47 //移动触摸
48 -(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
49 {
50     #define KColor arc4random()% 256/255.0
51     self.simple.backgroundColor = [UIColor colorWithRed:KColor green:KColor blue:KColor alpha:1];
52
53     //获取触摸设备的对象
54     UITouch *touch = [touches anyObject];
55     //获取前一个点
56     CGPoint p1 = [touch previousLocationInView:self.view];
57     //获取当前的点
58     CGPoint p2 = [touch locationInView:self.view];
59     //根据两个点的纵向距离来计算出移动结果,并复制给center,更新位置
60     //self.view.center = CGPointMake(self.view.center.x + p2.x - p1.x, self.view.center.y + p2.y - p1.y);
61
62     self.simple.center = CGPointMake(p2.x, p2.y);
63
64      NSLog(@"左右摸一摸");
65 }
66 //结束触摸
67 - (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
68 {
69     //随机颜色
70 #define KColor arc4random()% 256/255.0
71 //    self.simple.backgroundColor = [UIColor colorWithRed:KColor green:KColor blue:KColor alpha:1];
72     //self.simple.backgroundColor = [UIColor greenColor];
73      NSLog(@"哎呀,不摸了");
74 }
75 //取消触摸
76 - (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
77 {
78     //这个事件点击屏幕不松手,然后把程序转入后台才会触发,在实际中触发改事件一般有来个电话什么的
79      NSLog(@"取消触摸");
80 }
81 - (void)didReceiveMemoryWarning {
82     [super didReceiveMemoryWarning];
83     // Dispose of any resources that can be recreated.
84 }
85
86 @end

2.响应者链和手势

 1 #import "ViewController.h"
 2
 3 @interface ViewController ()
 4 @property (strong,nonatomic) UIView *simpleView;
 5 @end
 6
 7 @implementation ViewController
 8
 9 - (void)viewDidLoad {
10     [super viewDidLoad];
11     // Do any additional setup after loading the view, typically from a nib.
12     self.view.backgroundColor = [UIColor redColor];
13     self.simpleView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];
14     self.simpleView.backgroundColor = [UIColor magentaColor];
15     [self.view addSubview:self.simpleView];
16
17     //开启页面交互
18     //userInteractionEnabled 是可以中断响应者链的
19     //lable imageView是默认关闭的
20     self.view.userInteractionEnabled = YES;
21
22     UIImageView *image = [[UIImageView alloc] init];
23     image.userInteractionEnabled = NO;
24     //UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(TapAction:)];
25 //    //设置点击次数
26 //    tap.numberOfTapsRequired = 1;
27 //    //设置手指个数
28 //    tap.numberOfTouchesRequired = 2;
29 //    //添加手势控制器到视图上
30 //    [self.simpleView addGestureRecognizer:tap];
31     //长按手势
32     UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(LongAction)];
33     //设置长按时间
34     longPress.minimumPressDuration = 1;
35     [self.simpleView addGestureRecognizer:longPress];
36
37     //平移手势
38     UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction:)];
39     [self.simpleView addGestureRecognizer:pan];
40
41
42     //捏合手势
43     UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(PinchAction:)];
44     [self.simpleView addGestureRecognizer:pinch];
45
46     //旋转手势
47     UIRotationGestureRecognizer *rotion = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotionAction:)];
48     [self.simpleView addGestureRecognizer:rotion];
49
50 }
51 //旋转手势事件
52 -(void)rotionAction:(UIRotationGestureRecognizer *)rotion
53 {
54     rotion.view.transform = CGAffineTransformMakeRotation(rotion.rotation);
55     NSLog(@"头有点转晕了");
56 }
57
58 //捏合手势事件
59 -(void)PinchAction:(UIPinchGestureRecognizer *)pin
60 {
61     pin.view.transform = CGAffineTransformMakeScale(pin.scale, pin.scale);
62     NSLog(@"你是不是二哈");
63 }
64 //平移事件
65 -(void)panAction:(UIPanGestureRecognizer *)pan
66 {
67     //pan.view 中的view是上边的self.simpleView ,由于pan添加到了simpleView上,所以能控制它
68     CGPoint p = [pan translationInView:pan.view];
69     pan.view.transform = CGAffineTransformMakeTranslation(p.x, p.y);
70     NSLog(@"你是猪吗?");
71 }
72
73 //长按手势事件
74 -(void)LongAction
75 {
76     NSLog(@"你是英雄....");
77 }
78
79 -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
80 {
81 //    NSLog(@"%@",self.simpleView.nextResponder);
82 //    NSLog( @"%@",self.simpleView.nextResponder.nextResponder);
83 //    NSLog(@"%@",self.simpleView.nextResponder.nextResponder.nextResponder);
84 //    NSLog(@"%@",self.simpleView.nextResponder.nextResponder.nextResponder.nextResponder);
85 //    NSLog(@"%@",self.simpleView.nextResponder.nextResponder.nextResponder.nextResponder.nextResponder);
86 //    NSLog(@"%@",self.simpleView.nextResponder.nextResponder.nextResponder.nextResponder.nextResponder.nextResponder);
87
88 }
89 - (void)didReceiveMemoryWarning
90 {
91     [super didReceiveMemoryWarning];
92     // Dispose of any resources that can be recreated.
93 }
94
95 @end
时间: 2024-12-29 07:02:00

触摸事件,响应者链和手势的相关文章

iOS 事件响应者链的学习(也有叫 UI连锁链)

当发生事件响应的时候,必须知道由谁来响应事件.在iOS中,由响应链来对事件进行响应,所有的事件响应的类都是继承于UIResponder的子类,响应链是一个由不同对象组成的层次结构,其中每个对象将依次获得响应事件消息的机会 发生触摸事件后,系统将事件假如到由UIApplication管理的事件 队列  好处:遵循第一响应原则,总会优先处理队列中排在最前面的事件.(栈是先进后出 不符合业务逻辑) (1)事件传递(链) 1.传递链中时没有controller的,因为controller本身不具有大小的

UI-事件,触摸与响应者链(一)

首先,当发生事件响应时,必须知道由谁来响应事件.在IOS中,由响应者链来对事件进行响应,所有事件响应的类都是UIResponder的子类,响应 者链是一个由不同对象组成的层次结构,其中的每个对象将依次获得响应事件消息的机会.当发生事件时,事件首先被发送给第一响应者,第一响应者往往是事件发 生的视图,也就是用户触摸屏幕的地方.事件将沿着响应者链一直向下传递,直到被接受并做出处理.一般来说,第一响应者是个视图对象或者其子类对象,当其被 触摸后事件被交由它处理,如果它不处理,事件就会被传递给它的视图控

ios 事件响应者链

对于IOS设备用户来说,他们操作设备的方式主要有三种:触摸屏幕.晃动设备.通过遥控设施控制设备.对应的事件类型有以下三种: 1.触屏事件(Touch Event) 2.运动事件(Motion Event) 3.远端控制事件(Remote-Control Event) 响应者链条概 念: iOS系统检测到手指触摸(Touch)操作时会将其打包成一个UIEvent对象,并放入当前活动Application的事件队列,单例的 UIApplication会从事件队列中取出触摸事件并传递给单例的UIWin

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

事件处理的事件传递 简介: 发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件 队列中,UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理,通常,先发送事件给应用程序的主窗口(keyWindow) UIView不接受触摸事件的三种情况: 不接收用户交互 userInteractionEnabled = NO 隐藏 hidden = YES 透明 alpha = 0.0 ~ 0.01 提示:UIImageView的userInteract

触摸事件传递与响应者链条

触摸事件传递 •发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中 •UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理,通常,先发送事件给应用程序的主窗口(keyWindow) •主窗口会在视图层次结构中找到一个最合适的视图来处理触摸事件,这也是整个事件处理过程的第一步 •触摸事件的传递是从父控件传递到子控件,如果父控件不能接收触摸事件,那么子控件就不可能接收到触摸事件 响应者链条 1.如果view的控制器存在,就传递给控制器:

《从零开始学Swift》学习笔记(Day 68)——Cocoa Touch设计模式及应用之响应者链与触摸事件

原创文章,欢迎转载.转载请注明:关东升的博客 应用与用户进行交互,依赖于各种各样的事件.事件响应者对象是可以响应事件并对其进行处理的对象,响应者链是由一系列链接在一起的响应者组成的.响应者链在事件处理中是非常重要的,响应者链可以把用户事件路由给正确的对象. 响应者对象与响应链 UIResponder是所有响应者对象的基类,它不仅为事件处理,而且也为常见的响应者行为定义编程接口.UIApplication.UIView(及其子类,包括UIWindow)和UIViewController(及其子类)

响应者链触摸事件

触摸事件 在用户使用app过程中,会产生各种各样的事件 iOS中的事件可以分为3大类型 触摸事件: 加速计事件: 远程控制事件: 响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为“响应者对象” UIApplication.UIViewController.UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件 UIResponder UIResponder内部提供了以下方法来处理事件 触摸事件

iOS开发 - 响应者链触摸事件

触摸事件 在用户使用app过程中,会产生各种各样的事件 iOS中的事件可以分为3大类型 触摸事件: 加速计事件: 远程控制事件: 响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为"响应者对象" UIApplication.UIViewController.UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件 UIResponder UIResponder内部提供了以下方法来处理事件

iOS开发响应者链触摸事件

触摸事件 在用户使用app过程中,会产生各种各样的事件 iOS中的事件可以分为3大类型 触摸事件: 加速计事件: 远程控制事件: 响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为“响应者对象” UIApplication.UIViewController.UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件 UIResponder UIResponder内部提供了以下方法来处理事件 触摸事件