- 判断点在不在方法调用者的坐标系上(point:是方法调用者的坐标系上的点)
[外链图片转存中…(img-JLAyFFLH-1720096001500)]
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);
}
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
//把自己的点转换为按钮坐标系上的点
CGPoint buttonPoint=[self convertPoint:point toView:_button];
if ([_button pointInside:buttonPoint withEvent:event]) {
最后附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总)
面试成功其实是必然的,因为我做足了充分的准备工作,包括刷题啊,看一些Android核心的知识点,看一些面试的博客吸取大家面试的一些经验,下面这份PDF是我翻阅了差不多1个月左右一些Android大博主的博客从他们那里取其精华去其糟泊所整理出来的一些Android的核心知识点, 全部都是精华中的精华,我能面试到现在资深开发人员跟我整理的这本Android核心知识点有密不可分的关系,在这里本着共赢的心态分享给各位朋友。
这份PDF囊括了JVM,Java集合,Java多线程并发,Java基础,生命周期,微服务, 进程,Parcelable 接口,IPC,屏幕适配,线程异步,ART,架构,Jetpack,NDK开发,计算机网络基础,类加载器,Android 开源库源码分析,设计模式汇总,Gradle 知识点汇总…
由于篇幅有限,就不做过多的介绍,大家请自行脑补
a多线程并发,Java基础,生命周期,微服务, 进程,Parcelable 接口,IPC,屏幕适配,线程异步,ART,架构,Jetpack,NDK开发,计算机网络基础,类加载器,Android 开源库源码分析,设计模式汇总,Gradle 知识点汇总…
由于篇幅有限,就不做过多的介绍,大家请自行脑补