2015-09-07 38 views
2

我確定這可能聽起來像一個noob問題,但不知何故我卡住了,我需要幫助。考慮一下我的uibutton,它的背景圖像有一個隨意的可見邊界,點擊時會在按鈕邊界內觸摸,而不是在獨特的隨意可見邊界內,這完全有意義。但是,我想限制其觸摸可見邊界,而不是整個按鈕。請隨附隨附的圖片,說明我想在哪裏(綠色檢查)觸摸以及不在哪裏(紅色十字)。提前謝謝你。限制UIButton的觸摸到指定區域

enter image description here

+0

有點相關的帖子在這裏:[Custom UIView touch area](http://stackoverflow.com/a/11277512/593709) –

+0

哇!這是病態的。謝謝。將嘗試所有這些並回復你們。 –

回答

3

子類的UIButton並實現pointInside:withEvent方法。 https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//apple_ref/occ/instm/UIView/pointInside:withEvent

當系統想要知道事件給定的點是否在您的視圖內時,將會調用此函數。如果是則返回YES,否則返回NO。

所有你需要的是一種決定點是否在你的UIButton點擊區域的方式。當它返回YES時。

類似下面,它使用CGRects數組:

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

     // Only pass through of the point is in a specific area 
     BOOL ret=NO; 

     for (NSValue *value in self.passThroughAreas){ 
      CGRect rect=value.CGRectValue; 
      if (CGRectContainsPoint(rect, point)){ 
       // Its in one of our pass through areas. Let the events pass. 
       ret=YES; 
       break; 
      } 
     } 

    return ret; 
} 

您使用的矩形越來越你讓他們更有針對性的區域越小即可。或者如果你最終會使用太多的東西,請使用更有趣的東西。

+0

我也在尋找這種方法。 –

+0

這樣的事情:http://codedmi.com/questions/1899974/uibutton-hit-area-is-too-big? –

+1

那麼鏈接顯示如何使用'hitTest',你可以使用它來測試你的代碼。然而,最重要的是實現'pointInside',因爲這是用來決定一個視圖或其子項是否可以處理該事件的方法。我會從允許的矩形開始。當它的工作,你可以嘗試,更精細或使用更多的矩形,但較小的。 –