iOS響應者鏈的具體應用-異形按鈕

要實現以下圖的密集排列而且相互遮擋的菱形按鈕效果:bash

其UI層級的排列以下:ide

正常狀況下層的按鈕必定會被上層的按鈕遮擋,那麼當點擊按鈕的下半部分,實際上是點擊遮擋它的按鈕的透明區域。函數

這裏解決方案特別簡單,只須要將自定義按鈕,並將須要響應點擊區域計算出來,並重寫響應鏈判斷的方法,讓按鈕只在菱形的點擊範圍內去響應點擊事件:ui

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
    UIBezierPath *touchPath = [UIBezierPath bezierPath];
    [touchPath moveToPoint:CGPointMake(0, self.frame.size.height * 0.273)];
    [touchPath addLineToPoint:CGPointMake(self.frame.size.width * 0.5, self.frame.size.height * 0.545)];
    [touchPath addLineToPoint:CGPointMake(self.frame.size.width, self.frame.size.height * 0.273)];
    [touchPath addLineToPoint:CGPointMake(self.frame.size.width * 0.5, 0)];
    [touchPath closePath];
    
    if ([touchPath containsPoint:point]) {
        return YES;
    } else {
        return NO;
    }
}
複製代碼

這裏沒有經過數學函數的座標去計算,太麻煩了,我是經過貝塞爾曲線畫出來了響應的區域,而後經過判斷點擊的位置在不在這個區域來實現。spa

相關文章
相關標籤/搜索