写点什么

IOS 开发之——事件处理 -hiTest(69)

发布于: 2021 年 11 月 07 日
  • (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event

2.2 何时调用

当事件传递给一个控件的时候就会调用

2.3 调用过程

  • 看窗口是否能接收,如果不能 return nil;自己不能接收事件,也不能处理事件,而且也不能把事件传递给子控件

  • 判断点在不在窗口上,如果点在窗口上,意味着窗口满足合适的 view

2.4 作用

寻找最合适的 view


三 hiTest 底层实现原理



3.1 坐标系转换关系

  • 判断点在不在方法调用者的坐标系上(point:是方法调用者的坐标系上的点)


3.2 底层实现原理

  • (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event


{


if (self.userInteractionEnabled==NO||self.hidden==YES||self.alpha<=0.01) {


return nil;


}


if (![self pointInside:point withEvent:event]) {


return nil;


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


}


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;


}


四 hiTest 练习



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

评论

发布
暂无评论
IOS开发之——事件处理-hiTest(69)