05-hitTest練習(xí)1
業(yè)務(wù)邏輯:
底部一個(gè)按鈕, 按鈕的上面有一個(gè)View,遮擋在按鈕的上面.
點(diǎn)擊View時(shí), View接收事件,當(dāng)發(fā)現(xiàn)點(diǎn)擊的點(diǎn)在按鈕的位置時(shí), 讓底部的按鈕處理事件.
實(shí)現(xiàn)思路:
實(shí)現(xiàn)View的touchBegain方法,先堅(jiān)聽UIView的點(diǎn)擊.
并去實(shí)現(xiàn)UIView的HitTest方法, 在hitTest方法當(dāng)中通過(guò)把當(dāng)前點(diǎn)轉(zhuǎn)換成按鈕所在的坐標(biāo)系
CGPoint btnP = [self convertPoint:point toView:self.btn];
轉(zhuǎn)換過(guò)后查看當(dāng)前點(diǎn)在不在按鈕上,如果在按鈕上,就直接返回按鈕.
如果有在按鈕上,保持系統(tǒng)默認(rèn)做法.
實(shí)現(xiàn)代碼:
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
判斷當(dāng)前點(diǎn)在不在按鈕上.
把當(dāng)前點(diǎn)轉(zhuǎn)換成按鈕所在的坐標(biāo)系
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];
}
}