响应链,在中级高级开发中应该是个常见问题。而本人常常答非所问,致使每次名落大厂。
下面是个面试题,如何使响应链上的两个相邻的视图同时响应一次触摸。
响应链的传递:从内到外还是从外到内。?我这里是不会回答的,因为我说不清。
但是同时响应,我倒是有个方案。
在最外层的hitTest:withEvent内加上一个BOOL标记。每次触发置反,正则返回self,反则返回nill。返回nil的时候,响应链传递到下一级。
DemoView
{
BOOL bJump;//置反标记
}
...
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
bJump = !bJump;
if (bJump) {
return nil;
}
return self;//[super hitTest:point withEvent:event];
}
...
诸位在适应自己的场景自行修改。上面提供的思路仅供参考。
欢迎留言指正。
我去,我刚发完就要反悔了。
上面完全跑不通。
看来只有一个思路了。block大法。
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
bJump = !bJump;
if (bJump) {
return nil;
}
//在此处插入block
if(yourblock){yourblock();}
return self;//[super hitTest:point withEvent:event];
}
但此处的弊端很明显,不能使用touchBegan 、moved、ended来获取精确的point.
布局代码 Log可以看出已经同时响起两个View了。
求大神留言吧。
网友评论