iOS 判斷扇形按鈕的點擊

遇到一個需求是在頁面上添加下面這樣一個圖片,根據用戶點擊的不同位置,讓響應區域變顏色,以達到模擬按鈕的感覺。

不同響應區域的變顏色的圖片,UI給了   只有該區域變顏色,其他部分爲透明 這樣的圖片。

先將上面這個未點擊的圖片添加在xib,然後依次添加不同位置點擊的圖片在上面並設置hide爲yes。

所以在判定完用戶點擊的位置在某個區域中時,只需要將該圖片hide設置爲no,然後在touchesEnd方法中重新設置hide爲yes即可。

那麼該怎麼判斷用戶點擊了圖片中的那個區域呢?

1.一開始想到的是用數學的辦法,計算出不同區域的rect,然後在點擊方法中用區域去判斷,但是有些複雜,有沒有簡單一些的辦法呢?

2.貝塞爾曲線。這是一個神器,只需要用貝塞爾曲線畫出不同的區域,然後用

- (BOOL)containsPoint:(CGPoint)point;

這個方法去判斷是否在區域內即可。

如何用貝塞爾曲線畫圓和扇形呢?只要用到了貝塞爾曲線的這兩個方法:

//畫圓弧
+ (instancetype)bezierPathWithArcCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise; 
//畫圓
+ (instancetype)bezierPathWithRoundedRect:(CGRect)rect cornerRadius:(CGFloat)cornerRadius;

那麼如何具體畫一個扇形呢:

這裏有一個小技巧:

先以圓心爲中點,從1的位置爲開始畫圓弧到2,然後再以圓心爲中點,從3的位置畫圓弧到4。

(注意:兩次畫圓弧的方向是相反的) (BOOL)clockwise 控制方向。

然後調用

- (void)closePath;

方法即可完成2到3,4到1之間的線的自動封閉,一個扇形區域就完成了。

下面說一下貝塞爾曲線基礎,開始位置如下圖右方即0和2PI的位置,從開始位置往上是逆時針,往下是順時針。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章