首页 > 其他 > 详细

UIView响应事件的两个方法

时间:2018-04-27 11:18:50      阅读:193      评论:0      收藏:0      [点我收藏+]

参考自:https://blog.csdn.net/mushaofeng1990/article/details/62434349

用户触摸屏幕后的事件传递过程:

技术分享图片

 

 

 

 


//方法A
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ [super hitTest:point withEvent:event]; return nil; } //方法B -(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{ return YES; }

对view进行重写这两个方法后,就会发现,点击屏幕后,首先响应的是方法A

如果方法A中,我们没有调用父类的这个方法,那就根据这个方法A的返回view,作为响应事件的view。(当然返回nil,就是这个view不响应)

 

如果方法A中,我们调用了父类的这个方法,也就是

[super hitTest:point withEvent:event];那这个时候系统就要调用方法B;通过这个方法的返回值,来判断当前这个view能不能响应消息。

如果方法B返回的是no,那就不用再去遍历它的子视图。方法A返回的view就是可以响应事件的view。

如果方法B返回的是YES,那就去遍历它的子视图。(就是上图我们描述的那样,找到合适的view返回,如果找不到,那就由方法A返回的view去响应这个事件。)

 

因此总结下来:

//返回一个view来响应事件 (我们如果不想影响系统的事件传递链,在这个方法内,最好调用父类的这个方法)

- (nullableUIView *)hitTest:(CGPoint)point withEvent:(nullableUIEvent *)event;

//返回的值可以用来判断是否继续遍历子视图(返回的根据是触摸的point是否在view的frame范围内)

 

- (BOOL)pointInside:(CGPoint)point withEvent:(nullableUIEvent *)event;

 

UIView响应事件的两个方法

原文:https://www.cnblogs.com/liuw-flexi/p/8961033.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!