iOS - UIButton的特殊用法

在此主要介紹UIButton的一些特殊用法:UIButton的圖片與文字排版渴肉,UIButtonUIControlEvents限佩,以及UIButton背景圖片設(shè)置蔚润,至于給UIButton設(shè)置frame焚挠,UIButtonType之類的基礎(chǔ)知識蟹肘,就不做介紹璃吧。

一楣导、UIButton的圖片與文字排版

UIButton可以同時設(shè)置titleimage,但如果不對titleimage的位置進行調(diào)整畜挨,排版會很丑筒繁,如下:

    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    btn.frame = CGRectMake(90, 180, 100, 40);
    btn.layer.cornerRadius = 20;
    btn.backgroundColor = [UIColor cyanColor];
    [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    
    [btn setTitle:@"title" forState:UIControlStateNormal];
    [btn setImage:[UIImage imageNamed:@"co_ch_t"] forState:UIControlStateNormal];
    
    [self.view addSubview:btn];

不作任何處理的效果

上面的排版之所以不好看,那是因為圖片與文字靠的太近巴元,** 所以我們要將圖片與文字距離拉開些毡咏,這里就涉及到UIButtontitleEdgeInsetsimageEdgeInsets屬性,這兩個屬性的默認值為零逮刨,**如果我們將代碼修改下呕缭,效果將很不一樣:

    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    btn.frame = CGRectMake(90, 180, 100, 40);
    btn.layer.cornerRadius = 20;
    btn.backgroundColor = [UIColor cyanColor];
    [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    
    [btn setTitle:@"title" forState:UIControlStateNormal];
    [btn setImage:[UIImage imageNamed:@"co_ch_t"] forState:UIControlStateNormal];
    
    btn.titleEdgeInsets = UIEdgeInsetsMake(0.0,  0.0, 0.0,  - 10);
    btn.imageEdgeInsets = UIEdgeInsetsMake(0.0, - 10, 0.0, 0.0);
    
    [self.view addSubview:btn];
變美了~

自然,在開發(fā)的過程中修己,我們會遇到很多不一樣的需求臊旭,比如圖片在文字右邊,圖片在文字上邊箩退,等等离熏,我們都可以通過改變UIButtontitleEdgeInsetsimageEdgeInsets這兩個屬性來實現(xiàn)。
下面列舉一些排版例子:

    // 圖片在左邊戴涝,全部居中
    CGFloat spacing = 20;
    CGSize imageSize = btn0.imageView.frame.size;
    btn0.titleEdgeInsets = UIEdgeInsetsMake(0.0,  0.0, 0.0,  - spacing/2);
    // 對titleEdgeInsets的屬性賦值之后滋戳,title的寬度可能會變化钻蔑,所以我們需要在titleEdgeInsets賦值之后去獲取titleSize
    CGSize titleSize = btn0.titleLabel.frame.size;
    btn0.imageEdgeInsets = UIEdgeInsetsMake(0.0, - spacing/2, 0.0, 0.0);
    
    // 圖片在上邊,全部居中
    imageSize = btn1.imageView.frame.size;
    titleSize = btn1.titleLabel.frame.size;
    spacing = 2;
    btn1.titleEdgeInsets = UIEdgeInsetsMake(0.0, - imageSize.width, - (imageSize.height + spacing/2), 0.0);
    titleSize = btn1.titleLabel.frame.size;
    btn1.imageEdgeInsets = UIEdgeInsetsMake(- (titleSize.height + spacing/2), 0.0, 0.0, - titleSize.width);
    
    // 圖片在右邊奸鸯,全部居中
    spacing = 20;
    imageSize = btn2.imageView.frame.size;
    btn2.titleEdgeInsets = UIEdgeInsetsMake(0.0, - imageSize.width, 0.0, imageSize.width + spacing/2);
    titleSize = btn2.titleLabel.frame.size;
    btn2.imageEdgeInsets = UIEdgeInsetsMake(0.0, titleSize.width + spacing/2, 0.0, - titleSize.width);
    
    // 圖片在右邊咪笑,文字居中
    imageSize = btn3.imageView.frame.size;
    btn3.titleEdgeInsets = UIEdgeInsetsMake(0.0, - imageSize.width, 0.0, 0.0);
    titleSize = btn3.titleLabel.frame.size;
    btn3.imageEdgeInsets = UIEdgeInsetsMake(0.0, titleSize.width + imageSize.width + spacing, 0.0, - titleSize.width);
效果圖

二、UIButton的UIControlEvents

點擊UIButton娄涩,不僅僅會觸發(fā)添加在UIButton上的觸發(fā)事件窗怒,還會根據(jù)點擊動作,手指移開UIButton范圍等操作進行響應(yīng)蓄拣,就如聊天軟件中的錄音按鈕扬虚,根據(jù)手指的移動做各種需求處理,在此球恤,就會用到UIButtonUIControlEvents屬性:

typedef NS_OPTIONS(NSUInteger, UIControlEvents) {
        // 手指按下按鈕之后辜昵,在按鈕范圍內(nèi)滑動
        // 之前會先響應(yīng) UIControlEventTouchDown
        UIControlEventTouchDragInside ,
        
        // 手指按下按鈕之后,在按鈕范圍外滑動
        // 之前會依次先響應(yīng) UIControlEventTouchDown咽斧,UIControlEventTouchDragInside
        UIControlEventTouchDragOutside ,
        
        // 手指按下按鈕的時候觸發(fā)
        UIControlEventTouchDown ,
        
        // 手指按下按鈕之后堪置,在按鈕范圍內(nèi)抬起
        // 之前會依次先響應(yīng) UIControlEventTouchDown
        UIControlEventTouchUpInside ,
        
        // 手指按下按鈕之后,在按鈕范圍外抬起
        // 之前會依次先響應(yīng) UIControlEventTouchDown张惹,UIControlEventTouchDragInside舀锨,UIControlEventTouchDragOutside
        UIControlEventTouchUpOutside
    };
    
    // 給btn添加各種UIControlEvents,并添加觸發(fā)方法宛逗,在各個方法做相應(yīng)操作
    [btn addTarget:self action:@selector(record_btn_dragged:with_event:) forControlEvents:UIControlEventTouchDragInside];
    [btn addTarget:self action:@selector(record_btn_dragged2:with_event:) forControlEvents:UIControlEventTouchDragOutside];
    [btn addTarget:self action:@selector(record_btn_touched_down) forControlEvents:UIControlEventTouchDown];
    [btn addTarget:self action:@selector(record_btn_touched_up:with_event:) forControlEvents:UIControlEventTouchUpInside];
    [btn addTarget:self action:@selector(record_btn_touched_up2:with_event:) forControlEvents:UIControlEventTouchUpOutside];

三雁竞、UIButton背景圖片設(shè)置

UIButton背景圖片設(shè)置有兩種方法,在我上一篇《iOS - 背景圖片大小的調(diào)整》中有介紹拧额。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末碑诉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子侥锦,更是在濱河造成了極大的恐慌进栽,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恭垦,死亡現(xiàn)場離奇詭異快毛,居然都是意外死亡,警方通過查閱死者的電腦和手機番挺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門唠帝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人玄柏,你說我怎么就攤上這事襟衰。” “怎么了粪摘?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵瀑晒,是天一觀的道長绍坝。 經(jīng)常有香客問我,道長苔悦,這世上最難降的妖魔是什么轩褐? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮玖详,結(jié)果婚禮上把介,老公的妹妹穿的比我還像新娘。我一直安慰自己蟋座,他們只是感情好拗踢,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蜈七,像睡著了一般。 火紅的嫁衣襯著肌膚如雪莫矗。 梳的紋絲不亂的頭發(fā)上飒硅,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音作谚,去河邊找鬼三娩。 笑死,一個胖子當(dāng)著我的面吹牛妹懒,可吹牛的內(nèi)容都是我干的雀监。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼眨唬,長吁一口氣:“原來是場噩夢啊……” “哼会前!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起匾竿,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤瓦宜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后岭妖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體临庇,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年昵慌,在試婚紗的時候發(fā)現(xiàn)自己被綠了假夺。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡斋攀,死狀恐怖已卷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情淳蔼,我是刑警寧澤悼尾,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布柿扣,位于F島的核電站,受9級特大地震影響闺魏,放射性物質(zhì)發(fā)生泄漏未状。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一析桥、第九天 我趴在偏房一處隱蔽的房頂上張望司草。 院中可真熱鬧,春花似錦泡仗、人聲如沸埋虹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽搔课。三九已至,卻和暖如春截亦,著一層夾襖步出監(jiān)牢的瞬間爬泥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工崩瓤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留袍啡,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓却桶,卻偏偏與公主長得像境输,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子颖系,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

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