@SanMao
2015-08-06T00:31:36.000000Z
字数 1033
阅读 1169
事件处理
hitTest
方法寻找最优响应者) 是否能够获得交互
触摸点是否在UIWindow控件范围内
最外层子控件
开始遍历自己的子控件(当前截图中只有白色的UIView是UIWindow的子控件)是否能够获得交互
触摸点是否在UIWindow控件范围内
最外层子控件
开始遍历自己的子控件(紫色和绿色都是白色的子控件,但是紫色后添加,所以先传递给紫色(条用紫色控件的hitTest方法),如果紫色同样满足两个条件就继续遍历,最后可能轮到蓝色的时候依旧满足条件且蓝色没有子控件,那么蓝色就是最佳响应者,如果紫色不满足任何一个条件,那么就把时间传递给绿色来继续判断,如果绿色满足条件并且绿色已经没有子控件那么绿色控件就是最优的响应者,)
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
// 将触摸点转换成相对btn坐标原点的坐标,可通过转换后的坐标判断触摸点是否在btn上
CGPoint p = [self convertPoint:point toView:_btn];
NSLog(@"%@---%@",NSStringFromCGPoint(point),NSStringFromCGPoint(p));
// 如果当前触摸点在btn上就返回按钮,按钮作为最佳响应者
if ([_btn pointInside:p withEvent:event]) {
return _btn;
}
return [super hitTest:point withEvent:event];
}