擴大UIButton 響應區域

2021-08-28 12:02:33 字數 1563 閱讀 2940

根據設定按鈕方法可分為兩種方式

1.setimage: 設定內容顯示模式為居中,然後再設定的邊距和按鈕的大小

[[button imageview] setcontentmode: uiviewcontentmodecenter];

[[button setimage:[uiimage imagenamed:@"***.png"] forstate:uicontrolstatenormal];

//根據需求設定與按鈕周邊的邊距及按鈕的frame

[button setimageedgeinsets:uiedgeinsetsmake(10, 10, 10, 10)];

button.frame = cgrectmake(30, 30, 30, 30);

2. setbackgroundimage:設定按鈕背景上述方法就無效了,此時可以通過oc黑魔法來解決. 首先新增乙個uibutton的category來重寫hittest,然後通過為分類新增的乙個屬性來擴大按鈕的響應區域

uibutton+enlargehitarea.h

@inte***ce uibutton (extensions)

@property(nonatomic, assign) uiedgeinsets hittestedgeinsets;

@end

uibutton+enlargehitarea.m

#import "uibutton+enlargehitarea.h"

#import @implementation uibutton (enlargehitarea)

@dynamic hittestedgeinsets;

static const nsstring *key_hit_test_edge_insets = @"hittestedgeinsets";

-(void)sethittestedgeinsets:(uiedgeinsets)hittestedgeinsets

-(uiedgeinsets)hittestedgeinsets else

}- (bool)pointinside:(cgpoint)point withevent:(uievent *)event

cgrect relativeframe = self.bounds;

cgrect hitframe = uiedgeinsetsinsetrect(relativeframe, self.hittestedgeinsets);

return cgrectcontainspoint(hitframe, point);

}@end

通過設定按鈕分類的hittestedgeinsets屬性擴大按鈕的響應範圍

#import "uibutton+enlargehitarea.h"

[button sethittestedgeinsets:uiedgeinsetsmake(-10, -10, -10, -10)];

iOS 為UIButton擴大點選響應區域

我們可以為uibutton建立乙個category,然後利用runtime的繫結屬性,來擴大響應區域。先看一下.h檔案裡的,只宣告了乙個函式。使用的時候直接利用這個函式擴大四周的響應區域。import inte ce uibutton enlargetouchaera void setenlarge...

縮小客戶區 擴大非客戶區 的方法

當windows收到 wm nccalcsize 訊息時會指定客戶區大小,我們可以在這個時候設定客戶區的大小。引數lparam是乙個nccalcsize params結構,儲存包含三個矩形的陣列。第乙個矩形儲存視窗的客戶區。你只要改寫這個矩形的值就可以修改客戶區的大小了。修改了客戶區的大小後,還要響...

UIButton 觸發多個事件 響應同一函式

1v1繫結方法 uibutton利用函式 void addtarget id target action sel action forcontrolevents uicontrolevents controlevents 繫結事件。一般的n v 1繫結方法 一般是每次繫結乙個事件,如 uicontr...