代码改变世界

hitTest:withEvent:方法流程

2016-04-28 15:31  骨古  阅读(329)  评论(0编辑  收藏  举报

当时的项目需求是将一个view添加到UIButton之上,但是呢,又可以在View上点击UIButton,这是一个蛋疼的事

先上代码吧 然后再分析

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    //将坐标系上的点转换到按钮上
    CGPoint btnP = [self convertPoint:point toView:self.btn];
    //判断点在不在按钮上
    if ([self.btn pointInside:btnP withEvent:event]) {
        //点在按钮上
        return self.btn;
    } else {
        return [super hitTest:point withEvent:event];
    }
    
}

  1. 先讲下hitTest:withEvent:的作用,就是在你点击屏幕,事件传递的过程中,寻找到接受点击事件的最佳View
  2. pointInside:withEvent:是用来判断当前的点击或者触摸事件的点是否在当前的view。
    好了 有着两个方法,就可以透过遮盖的view,让下面的btn得到相应事件了
  3. 过程是先将遮盖view上的point转换到UIButton上,这是就会用到一个方法,就是convertPoint:toView
    得到转换的点之后,然后判断点是否在UIbutton的区域范围,如果是,就让这个Btn相应事件,不是的话,就返回遮盖的View.

先写到这里.