IOS 开发之——事件处理 -hiTest(69)
(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
2.2 何时调用
当事件传递给一个控件的时候就会调用
2.3 调用过程
看窗口是否能接收,如果不能 return nil;自己不能接收事件,也不能处理事件,而且也不能把事件传递给子控件
判断点在不在窗口上,如果点在窗口上,意味着窗口满足合适的 view
2.4 作用
寻找最合适的 view
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;
}
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
评论