2.2 何时调用
当事件传递给一个控件的时候就会调用
2.3 调用过程
-
看窗口是否能接收,如果不能return nil;自己不能接收事件,也不能处理事件,而且也不能把事件传递给子控件
-
判断点在不在窗口上,如果点在窗口上,意味着窗口满足合适的view
2.4 作用
寻找最合适的view
3.1 坐标系转换关系
- 判断点在不在方法调用者的坐标系上(point:是方法调用者的坐标系上的点)
3.2 底层实现原理
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
if (self.userInteractionEnabledNO||self.hiddenYES||self.alpha<=0.01) {
return nil;
}
if (![self pointInside:point withEvent:event]) {
return nil;
}
int count=self.subviews.count;
for (int i=count-1; i>=0; i–) {
UIView *childView=self.subviews[i];
//转换坐标系
CGPoint childPoint=[self convertPoint:point toView:childView];
UIView *fitView= [childView hitTest:childPoint withEvent:event];
if (fitView) {
return fitView;
}
}
return self;
}
4.1 界面
4.2 要求
-
界面上有一个Button,Button上方有一个GreenView布局
-
点击Button时,Button响应请求
-
点击Button上方的GreenView时,Button响应请求
-
点击GreenView上的其他区域时,GreenView响应请求
4.3 代码逻辑
GreenView.h
@interface GreenView : UIView
@property (nonatomic,weak) IBOutlet UIButton *button;
@end
GreenView.m
#import “GreenView.h”
@implementation GreenView
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
NSLog(@“%s”,func);
总结
最后对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!
这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司20年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
相信它会给大家带来很多收获:
当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!