iOS之Button點擊范圍以及熱區(qū)的放大

前言:

我負(fù)責(zé)努力垛叨,其余交給運氣伦糯。

正文:

開發(fā)中,我們的按鈕點擊熱區(qū)應(yīng)不小于44x44pt嗽元,否則這個按鈕就會讓用戶覺得“很難用”敛纲,點擊多次才能點中的趕腳。

一般這種情況剂癌,無外乎兩種淤翔,一種是設(shè)計圖尺寸給的小、一種是button圖片小佩谷,所以我們button做的就小旁壮。我整理出來了兩種解決方案。

1.放大button的熱區(qū)

繼承button谐檀,然后重寫了按鈕中的pointInside方法抡谐,使得按鈕熱區(qū)不夠44×44大小的先自動縮放到44×44,再判斷觸摸點是否在新的熱區(qū)內(nèi)桐猬。方法如下:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event{
    CGRect bounds = self.bounds;
    //若原熱區(qū)小于44x44麦撵,則放大熱區(qū),否則保持原大小不變
    CGFloat widthDelta = MAX(44.0 - bounds.size.width, 0);
    CGFloat heightDelta = MAX(44.0 - bounds.size.height, 0);
    bounds = CGRectInset(bounds, -0.5 * widthDelta, -0.5 * heightDelta);
    return CGRectContainsPoint(bounds, point);
}

2.setImageEdgeInsets

setImageEdgeInsets方法的好處就是不需要重寫UIButton溃肪,直接在新建的UIButton中改變屬性的值就可以達(dá)到我們想要的結(jié)果免胃。但是個人覺得,這種需求一旦很多的時候惫撰,沒有重寫好用羔沙,因為你要在很多地方去寫,哪怕項目封裝很好润绎,把這個抽出來單獨封裝,那也需要繁瑣的計算上左下右:

[button setImageEdgeInsets:UIEdgeInsetsMake(<#CGFloat top#>, <#CGFloat left#>, <#CGFloat bottom#>, <#CGFloat right#>)];

該方法并沒有改變button的熱區(qū),button為本身大小莉撇,但是它控制了button中的imageView的偏移呢蛤,可以通過設(shè)置上左下右,控制image大小和顯示位置棍郎。

3. hitTest
經(jīng)由小伙伴提示其障,發(fā)現(xiàn)也可以用hitTest實現(xiàn)類似效果。hitTest如果實現(xiàn)放大效果的話涂佃,其實代碼励翼、邏輯和pointInside都是是十分相似的:pointInside是我們放大了bounds然后判斷觸點是不是再其中,通過BOOL值控制是否響應(yīng)事件辜荠;hitTest也是改變bounds然后判斷觸點是不是再其中汽抚,最后是找到一個最適合的view來響應(yīng)事件;

但是其實伯病,重點是造烁,我發(fā)現(xiàn)hitTest其實牛逼之處不在這。所以我決定單獨整理一篇有關(guān)hitTest的文章午笛,嘿嘿惭蟋,大家有興趣的可以看一下哈。

總結(jié):

不會有最牛逼的解決方式药磺,只會有更適合的解決方式告组。

參考文章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市癌佩,隨后出現(xiàn)的幾起案子木缝,更是在濱河造成了極大的恐慌,老刑警劉巖驼卖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氨肌,死亡現(xiàn)場離奇詭異,居然都是意外死亡酌畜,警方通過查閱死者的電腦和手機怎囚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桥胞,“玉大人恳守,你說我怎么就攤上這事》废海” “怎么了催烘?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長缎罢。 經(jīng)常有香客問我伊群,道長考杉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任舰始,我火速辦了婚禮崇棠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘丸卷。我一直安慰自己枕稀,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布谜嫉。 她就那樣靜靜地躺著萎坷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沐兰。 梳的紋絲不亂的頭發(fā)上哆档,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音僧鲁,去河邊找鬼虐呻。 笑死,一個胖子當(dāng)著我的面吹牛寞秃,可吹牛的內(nèi)容都是我干的斟叼。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼春寿,長吁一口氣:“原來是場噩夢啊……” “哼朗涩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起绑改,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤谢床,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后厘线,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體识腿,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年造壮,在試婚紗的時候發(fā)現(xiàn)自己被綠了渡讼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡耳璧,死狀恐怖成箫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情旨枯,我是刑警寧澤蹬昌,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站攀隔,受9級特大地震影響皂贩,放射性物質(zhì)發(fā)生泄漏栖榨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一明刷、第九天 我趴在偏房一處隱蔽的房頂上張望治泥。 院中可真熱鬧,春花似錦遮精、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至劫扒,卻和暖如春檬洞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沟饥。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工添怔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贤旷。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓广料,卻偏偏與公主長得像,于是被迫代替她去往敵國和親幼驶。 傳聞我的和親對象是個殘疾皇子艾杏,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

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