精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Swift之貪婪的UIButton

移動開發
按鈕是所有UI體系中非常重要的組件,在iOS中按鈕UIButton的使用也非常靈活,本文將從幾點詳細介紹UIButton的使用。

一、內容概要

QQ截圖20150730101519.png

按鈕是所有UI體系中非常重要的組件,在iOS中按鈕UIButton的使用也非常靈活,本文將從以下幾點介紹UIButton的使用(基于Swift2.0):

  1. UIButton基礎
  2. UIButton圖片使用
  3. 圓角按鈕
  4. 復選框按鈕
  5. 倒計時按鈕(閃爍問題也輕松解決)
  6. 貪婪按鈕(父控件事件也歸我,擴大事件響應區域)

二、UIButton基礎

2.1 創建

UIButton提供了一個簡單的構造方法

 

  1. convenience init(type buttonType: UIButtonType) 

此方法中需要我們傳入一個UIButtonType枚舉類型,使用代碼如下:

  1. func createButton() { 
  2.     let button = UIButton(type: UIButtonType.System) 
  3.     button.frame = CGRectMake(505010050
  4.     button.setTitle("確定", forState: UIControlState.Normal) 
  5.     button.addTarget(self, action: "buttonPressed:", forControlEvents: UIControlEvents.TouchUpInside) 
  6.     self.view.addSubview(button) 
  7. func buttonPressed(button: UIButton) { 

Tips:

1.設置按鈕標題時,一定要通過

  1. func setTitleColor(color: UIColor?, forState state: UIControlState) 

不可通過

  1. button.titleLabel?.text = "確定" 

此方式會在點擊時標題自動變為setTitleColor方法Normal狀態下的文字.

2.2圖片使用

UIButton提供了以下兩個接口使用圖片:

  1. func setImage(image: UIImage?, forState state: UIControlState) 
  2. func setBackgroundImage(image: UIImage?, forState state: UIControlState) 

(1)其中接口setImage用來設置按鈕的圖片,默認情況下,它會與按鈕文字水平線性排列

(2)接口setBackgroundImage用來設置按鈕的背景圖片,setImage及按鈕文字都會顯示在背景圖片之上

這里著重討論一下setBackgroundImage接口,很多時候,按鈕看起來是這樣的:

QQ截圖20150730101627.png

這些按鈕,背景相同,只是尺寸不一樣,下面來談一下,如何復用這一類圖片資源.

2.2.1代碼方式

2.2.1.1 原理說明

在UIImage接口中,有以下方法

  1. func resizableImageWithCapInsets(_ capInsets: UIEdgeInsets) -> UIImage 

使用此方法時,需要傳遞UIEdgeInsets作為參數,創建接口如下:

  1. func UIEdgeInsetsMake(_ top: CGFloat, _ left: CGFloat, _ bottom: CGFloat, _ right: CGFloat) -> UIEdgeInsets 
這個方法提供了上下左右的參數來創建可變區域,如下圖(Tips:下圖標明的可變區域與視圖內邊距是不同的概念)

image_2.png

圖中,藍色標識為可變區域, 綠色標識為不變區域。UIEdgeInsets結構體的屬性top與bottom為一對,用來指定縱向可變區域(黑色虛線矩形),left與right為一對,用來指定橫向可變區域(白色虛線矩形)。當UIButton/UIImageView的size大于UIImage的size時,會調整圖片中可變區域大小以鋪滿整個控件,具體調整規則如下:

(1)控件寬度大于圖片寬度,拉伸白色虛線矩形

(2)控件高度大于圖片高度,拉伸黑色虛線矩形

(3)控制寬度小于圖片寬度時,橫向整體縮小(可變區與不變區比例不變)

(4)控制高度小于圖片高度時,縱向整體縮小(可變區與不變區比例不變)

iOS系統會根據設備的分辨率自動加載1倍圖、2倍圖、3倍圖,而方法resizableImageWithCapInsets中的上下左右是以像素為單位,這就要求在使用時,根據x倍圖,來設置對應的邊距,例如:

  1. let image = UIImage(named: "image_name"
  2. //1倍圖時上下左右邊距都是25 
  3. let padding = 25 * (image?.scale)! 
  4. let edge = UIEdgeInsetsMake(padding, padding, padding, padding) 
  5. let resizeImage = image?.resizableImageWithCapInsets(edge) 
  6. button.setBackgroundImage(resizeImage!, forState: UIControlState.Normal) 

#p#

2.2.1.2性能與可變區域大小的關系

(1)性能***:可變區為1像素寬或者高時,繪圖時通過拉伸1像素方式

(2)性能較好:可變區為整張圖片,方法resizableImageWithCapInsets參數為UIEdgeInsetsZero,繪制時通過平鋪整張圖片方式

(3)性能較差:可變區寬或者高大于1像素時,繪圖時通過平鋪方式,此種方式性能較差,但是在實際開發中此種方式也是用的最多的一種。

Tips

在一些應用中,應用程序有一些非純色背景,這個背景會在多個界面使用,由于設備分辨率、界面控件的尺寸差別,會要求制作多個尺寸的圖,導致ipa包變大、內存使用增加。這里結合上面(2)設置可變區為整張圖片,可以解決此問題,原理請看無縫貼圖

QQ截圖20150730101812.png

示例代碼如下:

 
  1. let image = UIImage(named: "tile"
  2. let resizeImage = image?.resizableImageWithCapInsets(UIEdgeInsetsZero) 
  3. self.bkImageView.image = resizeImage 
  4. 2.2.2 Asset Catalogs方式(推薦) 

Xcode提供了Asset Catalogs的方式來管理圖片資源,Asset Catalogs提供了可視化界面來設置圖片的可變區,操作方便,使用簡單。點擊右下方的Show Slicing

image_4.png

進入編輯模式后,圖片的中間會有一個Start Slicing按鈕,點擊后,會讓我們選擇拉伸方式,如下圖:

QQ截圖20150730101922.png

三個按鈕的作用

1
2
3
按鈕1只做水平拉伸
按鈕2水平垂直都拉伸
按鈕3只做垂直拉伸

水平及垂直的拉伸處理相同,這里以水平為例,選擇水平拉伸按鈕1后,會提供三條操作線用來指定可變區及刪除區

QQ截圖20150730102019.png

可變區:操作線1與操作線2指定的區域,在拉伸時,會根據最終尺寸改變此區域的大小

刪除區:操作線2與操作線3指定的區域(白色半透明層),可以簡單的理解為,此區域在拉伸時會被直接刪除。使用方法跟普通圖片一樣,代碼如下:

  1. let image = UIImage(named: "image_asset_name"
  2. button.setBackgroundImage(image, forState: UIControlState.Normal) 

QQ截圖20150730102059.png

#p#

三、UIButton其它用法

3.1 圓角按鈕

有些時候,我們需要一個圓形按鈕,例如頭像:

QQ截圖20150730102144.png

  1. let image = UIImage(named: "user_avatar"
  2. self.button.setImage(image, forState: UIControlState.Normal) 
  3. self.button.imageView?.layer.cornerRadius = self.button.frame.width / 2 

3.2 復選框按鈕

UIKit中沒有復選框組件怎么辦?

QQ截圖20150730102155.png

  1. func checkBoxButton() { 
  2.     let frame = CGRectMake(6879300128
  3.     let button = UIButton(type: UIButtonType.Custom) 
  4.     button.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal) 
  5.     button.frame = frame 
  6.     button.titleLabel?.font = UIFont.systemFontOfSize(30
  7.     button.contentHorizontalAlignment = UIControlContentHorizontalAlignment.Left 
  8.     button.setTitle("復選框按鈕", forState: UIControlState.Normal) 
  9.     //上面是樣式的設定,下面才是跟復選框有關 
  10.     button.addTarget(self, action: "buttonPressed:", forControlEvents: UIControlEvents.TouchUpInside) 
  11.     button.setImage(UIImage(named: "check"), forState: UIControlState.Normal) 
  12.     button.setImage(UIImage(named: "uncheck"), forState: UIControlState.Selected) 
  13.     self.view.addSubview(button) 
  14. func buttonPressed(button: UIButton) { 
  15.     button.selected = !button.selected 

3.3 倒計時按鈕(閃爍問題也輕松解決)

很多應用中發短信倒計時功能,一般都會將NSTimer與UIButton結合來實現此功能,如果UIButton是這么初使化的:

1
let button = UIButton(type: UIButtonType.System)

在測試時會發現,當定時器每隔一秒更改標題時,會有閃爍現象,將UIButtonType.System更改為UIButtonType.Custom即可

這里提供封裝好的倒計時按鈕大家可以直接下載使用:http://00red.com/download/Swift之貪婪的UIButton/ILCountDownButton.swift

使用示例如下:

 
  1. let frame = CGRectMake(505010040
  2. let countButton = ILCountDownButton(count: 5
  3. countButton.frame = frame 
  4. countButton.setBackgroundImageForCount(UIImage(named: "bk_count")!) 
  5. countButton.setBackgroundImageForRestart(UIImage(named: "bk_restart")!) 
  6. countButton.setTitleForRestart("重新發送"
  7. self.view.addSubview(countButton) 

四、貪婪按鈕

UIButton的frame會直接影響到setImage及setBackgroundImage的顯示效果,有的時候我們只需要擴大UIButton的點擊區域,而不想直接修改UIButton的frame而影響顯示。這時可以通過以下方法來處理

QQ截圖20150730102312.png

將UIButton的父視圖(superView)的點擊事件占有,所有的觸控操作全部轉嫁到UIButton控件上。iOS在處理事件分發時,分為兩個步驟:***步,查找哪一個UI組件響應此事件,第二步,事件處理,響應者鏈。要實現事件的轉嫁,在***步中來處理即可,代碼如下:

 
  1. class ILGreedButton: UIButton { 
  2.     override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? { 
  3.         return self 
  4.     } 

在使用ILGreedButton時,就會出現點擊父視圖,UIButton響應事件的效果

責任編輯:倪明 來源: 一葉博客
相關推薦

2009-08-20 13:48:37

C#正則表達式

2012-06-05 09:12:27

Windows Pho

2014-06-05 14:12:05

SwiftUI學習iOS

2015-04-17 16:30:46

swiftOC

2022-03-04 09:02:01

StoryBoard工具git

2014-09-26 09:49:48

SwiftObjective-C

2013-07-24 19:27:45

iOS開發學習自定義帶下劃線文本UI

2018-04-02 10:54:56

2011-08-17 16:29:12

iPhone開發UIButton

2015-04-17 16:07:11

swiftOC

2015-01-21 16:25:29

Swift指針

2016-06-07 14:42:18

Swift設計

2015-07-08 16:43:02

Configurati

2015-07-21 11:52:34

Swift分享按鈕源碼

2015-07-01 13:50:29

Swift開源思考

2015-03-16 10:33:14

Swift指針

2015-11-23 10:07:19

Swift模式匹配

2025-02-17 08:50:00

OpenAI馬斯克人工智能

2009-08-13 15:02:52

C#正則表達式引擎貪婪

2019-10-29 15:09:52

Python貪心算法代碼
點贊
收藏

51CTO技術棧公眾號

日韩区欧美区| av男人的天堂在线| 狠狠爱www人成狠狠爱综合网| 日本电影亚洲天堂一区| 日韩免费毛片| 国产一区二区在线不卡| 日韩情爱电影在线观看| 欧美另类变人与禽xxxxx| 久久香蕉视频网站| 五月婷婷久久久| 亚洲欧美清纯在线制服| 亚洲深夜福利在线| 九九精品久久久| 人妖欧美1区| 风流少妇一区二区| 欧美在线观看网址综合| 超碰人人干人人| 日韩精品一区二区三区免费视频| 一区二区视频在线看| 国产精品一区在线播放| 日韩免费av网站| 亚洲精品网址| 日韩精品亚洲元码| 99精品视频国产| 九色porny丨首页入口在线| 国产网站一区二区| 国产伦精品一区二区三区高清| 日本中文字幕久久| 欧美1区2区视频| 国产视频在线一区二区| 午夜免费一级片| 亚洲少妇视频| 一区二区三区在线视频免费 | 特一级黄色大片| 国产一区二区观看| 日韩精品一区二区三区老鸭窝| 国产超级av在线| av超碰免费在线| 成人av手机在线观看| 91精品久久久久久综合乱菊| 少妇一级淫片免费放中国 | 国产一区不卡精品| 久久久免费精品视频| 亚洲天堂精品一区| 最新精品国偷自产在线| 日韩欧美视频一区| 无尽裸体动漫2d在线观看| 草草视频在线| 亚洲欧洲在线观看av| 久久99精品久久久久久久久久| 一级特黄aaa大片| 久色成人在线| 91国自产精品中文字幕亚洲| 青春草免费视频| 欧美综合视频| 亚洲精品自拍视频| 国产精品扒开腿做爽爽爽a片唱戏 亚洲av成人精品一区二区三区 | 蜜桃视频一区二区三区在线观看| 久久久免费观看视频| 欧美日韩一级在线观看| 亚洲国产一成人久久精品| 亚洲最新视频在线| 精品少妇人妻一区二区黑料社区| 久久免费视频66| 91精品国产综合久久精品麻豆| 小泽玛利亚视频在线观看| 精品美女一区| 欧美性xxxxx极品少妇| 日本毛片在线免费观看| 青青青免费在线视频| 夜夜嗨av一区二区三区中文字幕| www.午夜色| 日本精品一区二区三区在线播放| 国产日韩视频一区二区三区| 日本高清久久一区二区三区| 亚洲国产精品视频在线| 成人激情午夜影院| 国产一区二区三区高清| 图片区 小说区 区 亚洲五月| 粉嫩av一区二区三区| 国产精品免费观看高清| 免费国产精品视频| aaa国产一区| 久久久久久久有限公司| 日本一级在线观看| 久久亚洲二区三区| 欧美一区二区福利| 成人精品一区| 国产免费成人在线视频| 亚洲在线观看一区| 2024最新电影免费在线观看 | 欧美肥妇毛茸茸| 免费观看黄网站| 激情视频极品美女日韩| 亚洲欧美日韩网| 欧美乱大交做爰xxxⅹ小说| 国产精品黑丝在线播放| 久久久久久久香蕉网| 久久久久久久久久久97| 国产欧美短视频| 国产成人拍精品视频午夜网站| 夜夜躁狠狠躁日日躁av| 国产不卡一区视频| 免费国产一区| 里番在线观看网站| 亚洲综合色区另类av| 日本网站免费在线观看| 欧美日韩视频免费看| 欧美理论片在线| 国产精品扒开腿做爽爽爽a片唱戏| 欧美禁忌电影| 欧美理论片在线观看| 国产精品黄色大片| 美女视频黄免费的久久| 国产精品视频入口| 岛国在线视频| 一区二区三区精品在线观看| 国产精品wwwww| 日韩精品中文字幕吗一区二区| 亚洲精品有码在线| 超碰手机在线观看| 老妇喷水一区二区三区| 91中文字幕在线| 男人的天堂在线| 亚洲久本草在线中文字幕| 黄在线观看网站| 香蕉成人app| 亚洲午夜性刺激影院| 97在线观看免费高| 天堂一区二区在线| 91黄色精品| a黄色在线观看| 亚洲精选视频在线| 毛片av免费在线观看| 97久久亚洲| 在线精品高清中文字幕| 91成人福利视频| 秋霞午夜av一区二区三区| 99中文字幕| 免费在线观看av| 欧美日韩免费在线| 男人女人拔萝卜视频| 日韩免费高清| 日本亚洲欧美三级| 天天干免费视频| 亚洲一区二区精品3399| 日本一二三区在线| 欧美国产一级| 国产精品久久久久久久久久久久 | 免费麻豆国产一区二区三区四区| 美女免费视频一区二区| 日韩高清三级| 亚洲精品一级二级| 亚洲欧美国产精品| 国产精品男女视频| 国产精品中文字幕日韩精品| 最新欧美日韩亚洲| 成人污版视频| 日韩视频免费看| 亚洲一区二区影视| 久久视频一区| 欧美久久综合性欧美| 欧美电影免费观看| 国产一区二区av| 中文字幕一区二区人妻| 亚洲私人黄色宅男| 日本成人在线免费观看| 激情综合电影网| 久久久久久国产精品mv| 亚洲精品一区三区三区在线观看| 色系列之999| www香蕉视频| 午夜国产精品影院在线观看| 9.1成人看片免费版| 日韩经典中文字幕一区| 熟女视频一区二区三区| 超碰在线亚洲| 国产精品成人一区二区| 成人午夜在线影视| 亚洲成人性视频| 狠狠人妻久久久久久| 国产精品久久99| 欧美xxxxx少妇| 久久性色av| 国产一区一区三区| 成午夜精品一区二区三区软件| 9.1国产丝袜在线观看| 成人av毛片| 欧美成人r级一区二区三区| 亚洲午夜18毛片在线看| 亚洲婷婷综合久久一本伊一区| 熟妇高潮一区二区| 蜜桃视频在线观看一区| 日韩一级性生活片| 成人情趣视频| 国产欧美韩日| 国产欧美在线观看免费| 97视频免费观看| 国产美女av在线| 亚洲人在线视频| www.黄色小说.com| 欧美亚州韩日在线看免费版国语版| 五月婷婷一区二区| 国产精品久久影院| 在线免费观看a级片| 激情综合网最新| 久久久999视频| 欧美一区二区三区久久精品茉莉花| 久久偷窥视频| 北条麻妃在线一区二区免费播放 | 欧美日韩国产999| 国产私拍精品| 日韩黄色av网站| 亚洲av无码一区二区乱子伦| 欧美三级一区二区| 国产综合精品视频| 亚洲夂夂婷婷色拍ww47| 任我爽在线视频| 久久久久久9999| 少妇精品一区二区| 成人免费高清在线观看| 香蕉视频色在线观看| 免播放器亚洲一区| 成人黄色一区二区| 亚洲在线视频| 日韩视频在线视频| 欧美韩国一区| 亚洲av首页在线| 天天综合亚洲| 一本一生久久a久久精品综合蜜 | www.亚洲在线| 国产精品欧美性爱| 国产精品一区二区三区四区| 波多野结衣天堂| 日韩电影在线免费| 日韩精品一区二区三区色欲av| 国产日韩专区| 成人毛片视频网站| 亚洲久久一区| 国产极品尤物在线| 99国产精品久久久久久久| 成人性生活视频免费看| 亚洲经典在线| 国产一区二区视频播放| 9国产精品视频| 波多野结衣家庭教师在线| 亚洲精品色图| 又粗又黑又大的吊av| 亚洲女同同性videoxma| 无码aⅴ精品一区二区三区浪潮| 妖精视频成人观看www| 国产极品粉嫩福利姬萌白酱| 麻豆精品网站| 国产又粗又长又大的视频| 欧美aaa在线| 加勒比av中文字幕| 国产精品主播直播| 最新日本中文字幕| 91原创在线视频| 扒开jk护士狂揉免费| 欧美韩日一区二区三区四区| 日本女人性生活视频| 亚洲精品国久久99热| xxxxxx国产| 色老汉av一区二区三区| 一级aaaa毛片| 日韩久久免费av| 性xxxxbbbb| 在线观看日韩www视频免费| 麻豆影院在线| 久久久久国产视频| 欧美极度另类| 成人字幕网zmw| h视频久久久| 青青草原成人| 91精品亚洲| 国产视频一视频二| 日本成人中文字幕| 在线观看你懂的视频| 久久一区二区视频| 尤物在线免费视频| 亚洲成av人片在线观看无码| 国产一级免费视频| 91精品国产一区二区三区香蕉| 狠狠人妻久久久久久综合麻豆| 亚洲精品国精品久久99热一| 触手亚洲一区二区三区| 欧美激情videos| 午夜日韩成人影院| 亚洲jizzjizz日本少妇| 欧美男人操女人视频| 在线观看精品视频| 在线亚洲自拍| 污视频在线观看免费网站| 久久人人97超碰com| 91视频综合网| 欧美性猛交xxxx免费看久久久| 亚洲综合精品视频| 亚洲成人aaa| 菠萝菠萝蜜在线观看| 日本国产一区二区三区| 日韩一区免费| 小说区图片区图片区另类灬| 激情成人综合| 亚洲色图欧美自拍| 国产女同互慰高潮91漫画| 国产精品9191| 欧美一区二区三区免费观看视频| 国产中文字幕在线播放| 欧美精品videossex性护士| 成人亚洲视频| 欧美xxxx黑人又粗又长密月| 午夜久久福利| 中日韩av在线播放| 欧美高清在线一区| 国产99久久久| 日韩电影中文字幕在线| 亚洲男同gay网站| 国产日韩欧美综合| 久久99青青| 狠狠97人人婷婷五月| 成人免费电影视频| 国产精品国产精品88| 欧美日本高清视频在线观看| 电影av在线| 国产成人精品久久亚洲高清不卡| 美女呻吟一区| 福利在线一区二区| 高清不卡在线观看| 欧美日韩三级在线观看| 日韩一卡二卡三卡| 菠萝菠萝蜜在线视频免费观看| 成人av色在线观看| 日韩在线视频精品| 免费看黄色一级大片| 国产免费久久精品| 中文字幕第99页| 国产一区二区三区精品久久久| 芒果视频成人app| 久久伊人一区| 国产免费成人| av在线网站观看| 色视频一区二区| 国产69精品久久app免费版| 国产91网红主播在线观看| 欧美激情在线免费| 香蕉视频网站入口| 国产精品色在线| 国产免费久久久| 色综合天天狠天天透天天伊人| 欧美成人一级| 久久这里只有精品18| 99久久久免费精品国产一区二区| 五月婷婷中文字幕| 亚洲精品自在久久| 久久久加勒比| 丰满人妻一区二区三区53号| 国产mv日韩mv欧美| 国产精品50页| 亚洲日韩第一页| 国产亚洲精彩久久| 三级网在线观看| 高清国产一区二区| 久久露脸国语精品国产91| 亚洲欧美日韩区| 欧美成人福利| 男人添女人下部视频免费| 成人免费毛片aaaaa**| 无码aⅴ精品一区二区三区| 尤物yw午夜国产精品视频| 电影一区中文字幕| 免费看欧美黑人毛片| 久久天天做天天爱综合色| 一本到在线视频| 久久久久久午夜| 国产一区二区三区四区二区| 国内自拍第二页| 午夜精品视频一区| jizz在线观看视频| 91福利视频导航| 乱人伦精品视频在线观看| 最新av电影网站| 亚洲精品久久久久久久久久久久| 浪潮色综合久久天堂| 91九色国产ts另类人妖| 91在线观看下载| 国产女人高潮时对白| 日本午夜人人精品| 欧美成人一区二免费视频软件| 日韩人妻无码一区二区三区| 欧美日本韩国一区| 黑森林国产精品av| 91九色国产ts另类人妖| 久久久午夜精品| 国产av无码专区亚洲a∨毛片| 欧美在线视频一区| 欧美精品97| 极品尤物一区二区| 亚洲国产精品资源| 久久久国产精品入口麻豆|