擴(kuò)大按鈕點(diǎn)擊兩種方式

測(cè)試案例

看上圖,代碼很簡(jiǎn)單在藍(lán)色視圖是內(nèi)容view徙邻,在內(nèi)容view上有一個(gè)button就是紅色的方框,這個(gè)button寬高是15x15畸裳。

經(jīng)常遇到這樣的需求缰犁,UI設(shè)計(jì)的按鈕樣式很小,但是要求擴(kuò)大點(diǎn)擊范圍怖糊。最先想到一種辦法是帅容,底部放圖片,上面放一個(gè)透明的button伍伤,這種方式可以實(shí)現(xiàn)并徘,但是隨著業(yè)務(wù)增加,代碼不緊難看扰魂,還很冗余麦乞。

第二種方式:

- (nullableUIView*)hitTest:(CGPoint)point withEvent:(nullableUIEvent*)event; 這個(gè)方法

簡(jiǎn)單說這個(gè)方法就是會(huì)遍利所有子視圖蕴茴,通過pointInside:withEvent:這個(gè)方法判斷點(diǎn)擊的點(diǎn)是否在響應(yīng)視圖內(nèi),找到指定點(diǎn)最前面的視圖也就是最上層的視圖姐直,然后返回倦淀。

我們加上這么一段代碼:

- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event {

? ? CGRect newRect =CGRectInset(self.actionButton.frame, -20, -20);

? ? if(CGRectContainsPoint(newRect, point) && !self.actionButton.hidden&&self.actionButton.alpha>0.01) {

? ? ? ? return self.actionButton;

? ? }

?? return [superhitTest:pointwithEvent:event];

}

? 我們通? CGRect newRect =CGRectInset(self.actionButton.frame, -20, -20);這個(gè)方法來擴(kuò)大button的frame声畏。注意:dx撞叽、dy是負(fù)值是擴(kuò)大,正值是縮小,如果我的x插龄、y都以0為起點(diǎn) dx愿棋、dy縮小的情況下,在Autolayout用這個(gè)方法后x辫狼、y的值可能不會(huì)出來初斑,frame 部局下會(huì)正常。例如說我的button的frame是(origin = (x = 42.666666666666657, y = 42.666666666666686), size = (width = 15, height = 15))膨处,擴(kuò)大后位置和大小是(origin = (x = 22.666666666666657, y = 22.666666666666686), size = (width = 55, height = 55)),x作標(biāo)與y作標(biāo)分別減20砂竖,55這個(gè)值是怎么來的呢真椿?20x2+15 = 55是這么來的。然后后判斷CGRectContainsPoint(newRect, point) 點(diǎn)是否在新作標(biāo)內(nèi)乎澄,再加上后面的常規(guī)判斷突硝。這樣就可以了!

第三種方式:

由于調(diào)用了init方法所以會(huì)走系統(tǒng)layoutSubViews方法置济,這個(gè)方法會(huì)計(jì)算出按鈕的實(shí)際坐標(biāo)解恰,利用這一點(diǎn)新生成一個(gè)frame

- (void)layoutSubviews {

? ? [super layoutSubviews];

? ? self.actionRect = CGRectMake(self.actionButton.frame.origin.x - 20, self.actionButton.frame.origin.y - 20, CGRectGetWidth(self.actionButton.frame)+ 20, CGRectGetHeight(self.actionButton.frame) + 20);

}

然后和上面的代碼一樣,上述兩種方式都可以實(shí)現(xiàn)浙于。推薦用第二種护盈,因?yàn)椴挥寐暶餍碌淖兞浚賹懸粋€(gè)方法羞酗,最重要的是layoutSubviews會(huì)增加CPU的負(fù)擔(dān)腐宋。

最后附上Demo

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市檀轨,隨后出現(xiàn)的幾起案子胸竞,更是在濱河造成了極大的恐慌,老刑警劉巖参萄,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卫枝,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡讹挎,警方通過查閱死者的電腦和手機(jī)校赤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門吆玖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人痒谴,你說我怎么就攤上這事衰伯。” “怎么了积蔚?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵意鲸,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我尽爆,道長(zhǎng)怎顾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任漱贱,我火速辦了婚禮槐雾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘幅狮。我一直安慰自己募强,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布崇摄。 她就那樣靜靜地躺著擎值,像睡著了一般。 火紅的嫁衣襯著肌膚如雪逐抑。 梳的紋絲不亂的頭發(fā)上鸠儿,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音厕氨,去河邊找鬼进每。 笑死,一個(gè)胖子當(dāng)著我的面吹牛命斧,可吹牛的內(nèi)容都是我干的田晚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼冯丙,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼肉瓦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起胃惜,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤泞莉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后船殉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鲫趁,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年利虫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挨厚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片堡僻。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖疫剃,靈堂內(nèi)的尸體忽然破棺而出钉疫,到底是詐尸還是另有隱情,我是刑警寧澤巢价,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布牲阁,位于F島的核電站,受9級(jí)特大地震影響壤躲,放射性物質(zhì)發(fā)生泄漏城菊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一碉克、第九天 我趴在偏房一處隱蔽的房頂上張望凌唬。 院中可真熱鬧,春花似錦漏麦、人聲如沸客税。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽霎挟。三九已至,卻和暖如春麻掸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赐纱。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工脊奋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疙描。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓诚隙,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親起胰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子久又,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容