在iOS開發(fā)中會遇到一些設計樣式,需要把按鈕一部分懸空在父視圖的上面扮叨,但是當我們點擊該按鈕時,超出了父視圖的懸空部分不會響應該按鈕的點擊事件。
原理就是iOS的touch事件的相應是從最下方的父視圖開始的疫铜,系統(tǒng)判斷點擊的坐標點上沒有子視圖,所以不再響應双谆,該原理可參見之前寫過的這篇文章壳咕,超出俯視圖的點擊響應原理席揽。
效果圖如下,寫評論這個按鈕需要做處理谓厘。
Simulator Screen Shot 2016年10月12日 下午3.23.12.png
然后幌羞,分析一下代碼,這里主要說一下核心代碼吧竟稳。在自定義的UIView視圖類中属桦,我們重寫點擊視圖的方法,
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
UIView * view = [super hitTest:point withEvent:event];
if (view == nil) {
// 轉換坐標系
CGPoint newPoint = [commentImageView convertPoint:point fromView:self];
// 判斷觸摸點是否在button上
if (CGRectContainsPoint(commentImageView.bounds, newPoint)) {
view = commentImageView;
}
}
return view;
}
commentImageView是這懸空的按鈕視圖他爸,這里用的是一個UIImageView地啰,因為外包美工做的圖Px大小有問題,不然肯定用的UIButton讲逛。該方法就是在點擊懸空按鈕懸空部分時亏吝,判斷該點上有沒有響應的子視圖,如果沒有盏混,就再判斷一下該點是不是在點擊的這個按鈕的視圖坐標范圍內蔚鸥,是的話就把這個按鈕視圖返回。這樣我們的點擊事件就有反應了许赃。