IOS 自定義button有效點擊范圍


那么如何自定義按鈕點擊的有效區域呢,其實很簡單,只要重寫一個函數即可:

 

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event

 

系統發生觸摸事件的時候會從window到父控件到子控件一個個檢測觸摸點是否在其中,如果在其中,則返回YES,最后返回YES的子控件作為響應事件的控件。

 

我們只要重寫這個方法,在其中判斷,是否點擊了我們想要的區域,是的話就返回YES,否則返回NO,這樣就實現了自定義點擊的有效區域了。注意,這邊並沒有改變按鈕的形狀,按鈕還是矩形的按鈕,只是改變了按鈕中響應區域而已。

 

那么接下來的問題就是,怎么判斷一個點是否在一個不是矩形的區域中呢,這邊可以使用UIBezierPath的方法:

- (BOOL)containsPoint:(CGPoint)point;

 

我們可以先根據想要的形狀繪制一條path,然后判斷調用上面的方法去判斷即可。

 

例如一個正方形的按鈕,怎么才能讓他在它圓形的范圍點擊才有反應,其他的地方沒有反應呢?

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
    //首先調用父類的方法確定點擊的區域確實在按鈕的區域中
    BOOL res = [super pointInside:point withEvent:event];
    if (res) {
        //繪制一個圓形path
        UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:self.bounds];
        if ([path containsPoint:point]) {
            //如果在path區域內,返回YES
            returnYES;
        }
        returnNO;
    }
    returnNO;
}

 這樣,點擊按鈕圓形的部分才會有效果,其他地方沒有反應。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM