iOS面试题--响应链之同时响应

2021-05-24  本文已影响0人  LV大树

响应链,在中级高级开发中应该是个常见问题。而本人常常答非所问,致使每次名落大厂。
下面是个面试题,如何使响应链上的两个相邻的视图同时响应一次触摸。

响应链的传递:从内到外还是从外到内。?我这里是不会回答的,因为我说不清。

但是同时响应,我倒是有个方案。
在最外层的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了。
求大神留言吧。

上一篇 下一篇

猜你喜欢

热点阅读