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)
时间: 2024-10-25 21:39:05