2014-01-12 27 views
2

我正在嘗試創建一個Tabla鼓應用程序(一張桌子是一對連接在一起的小手鼓)。要做到這一點,我想通過把一個在另一個之上的鼓的每個部分使用一個按鈕。像這樣:重疊圓形按鈕和擊打/敲擊測試

enter image description here

我已經使用該按鈕的圓形圖像嘗試,但周邊地區是一個矩形。這意味着當用戶擊中綠色圓圈的一部分時,它會播放橙色圓圈的聲音(我希望這是有道理的)。

我怎麼能保證聲音的綠色墊起到當用戶點擊綠色墊,併爲橙色墊的聲音,當用戶點擊橙色墊玩過嗎?

回答

4

沒有「簡單的方法」來限制敲擊檢測區域。你是完全正確的:按鈕的敲擊檢測區域是它的矩形,這就是它所知道的。因此,您無法使用該按鈕的簡單點按檢測功能爲您完成工作。你將不得不自己檢測水龍頭,看看它在哪裏,並使用這些知識加上你知道圓圈圖紙的位置來決定用戶敲入哪一部分鼓。

看看UITapGestureRecognizer用於找出用戶點擊的位置以及位置。

看UIBezierPath一種方式來執行擊中檢測相對於一形狀(例如圓形,回答這個問題,「在該圓這點」)。

你最好的選擇可能是修改內置命中測試,即在你重寫pointInside:withEvent:返回YES只有在點內圓內的UIButton或UIView子類,如:

-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { 
    UIBezierPath* p = [UIBezierPath bezierPathWithOvalInRect:self.bounds]; 
    return [p containsPoint:point]; 
} 

這就像它將要得到的「簡單」一樣,恐怕。