2.0 触摸事件

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

 

1、不接收用户交互
userInteractionEnabled = NO
2、隐藏
hidden = YES
3、透明
alpha = 0.0 ~ 0.01
4. 如果子视图的位置超出了父视图的有效范围, 那么子视图也是无法与用户交互的, 即使设置了父视图的 clipsToBounds = NO, 可以看到, 但是也是无法与用户交互的
 
提示:UIImageView的userInteractionEnabled默认就是NO,因此UIImageView以及它的子控件默认是不能接收触摸事件的
 
 
触摸事件中的方法:
 
 1 // 手指按下的时候调用
 2 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;
 3 
 4 // 手指移动的时候调用
 5 - (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(nullableUIEvent *)event;
 6 
 7 // 手指抬起的时候调用
 8 - (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(nullableUIEvent *)event;
 9 
10 // 取消(非正常离开屏幕,意外中断事件)
11 - (void)touchesCancelled:(nullableNSSet<UITouch *> *)touches withEvent:(nullableUIEvent *)event;
1 // 3D Touch相关方法,当前触摸对象触摸时力量改变所触发的事件,返回值是UITouchPropertyie
2 - (void)touchesEstimatedPropertiesUpdated:(NSSet * _Nonnull)touches NS_AVAILABLE_IOS(9_1);

 

相关代码:

 1 #import “TDView.h"
 2 
 3 @implementation TDView
 4 
 5 // 手指触摸到这个view的时候调用
 6 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
 7 
 8   UITouch *t = touches.anyObject;
 9 
10   NSLog(@"%ld", t.tapCount); // 点击这个响应者对象的次数
11 
12   NSLog(@"%@", t.window); // 点击这个响应者对象所在的window
13   NSLog(@"%@", self.window);
14   NSLog(@"%@", [UIApplication sharedApplication].keyWindow);
15 
16   NSLog(@"%s", __func__);
17 }
18 
19 // 手指在这个view上移动的时候调用
20 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
21   // 获取触摸对象
22   UITouch *t = touches.anyObject;
23 
24   // 获取上一个点的位置
25   CGPoint lastP = [t previousLocationInView:self.superview];
26   NSLog(@"%@----上一个点的位置", NSStringFromCGPoint(lastP));
27 
28   // 获取当前点的位置
29   CGPoint p = [t locationInView:self.superview];
30   NSLog(@"%@----当前点的位置", NSStringFromCGPoint(p));
31 }
32 
33 // 手指离开这个view的时候调用
34 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
35       NSLog(@"%s", __func__);
36 }
37 
38 // 取消(非正常离开屏幕)
39 - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
40       NSLog(@"%s", __func__);
41 }
42 
43 @end

 

补充:关于NSSet和 NSArray
 
 
如何访问
如何取值
如何遍历
效率
                   应用场景
 
 
NSSet
集合
无序访问,不重复的。
 
存放到 NSSet 中的内容并不会排序与添加顺序也没有关系
取集合里面任意一个元素 anyObject
 
通过 anyObject 来访问单个元素
for in  效率高
(1)比如重用 Cell 的时候, 从缓存池中随便获取一个就可以了, 无需按照指定顺序来获取
 
(2)当需要把数据存放到一个集合中, 然后判断集合中是否有某个对象的时候
 
 
NSArray
数组
有序访问,可以有重复对象。
 
对象的顺序是按照添加的顺序来保存的
 
通过下标来访问
for 
 
forin
 
 
当需要把数据存放到一个集合中, 然后判断集合中是否有某个对象的时候
 
 

如有疑问,请发送邮件至  [email protected] 联系我。
 
By:蓝田(Loto)
 

你可能感兴趣的:(2.0 触摸事件)