程序的啟動(dòng)
// 程序的入口
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// 如果不在這個(gè)方法中去創(chuàng)建window,并且把創(chuàng)建的window作為應(yīng)用程序的主窗口。那么應(yīng)用程序會(huì)自動(dòng)去通過(guò)Main.storyboard去創(chuàng)建window并且啟動(dòng)Main.storyboard中箭頭指向的界面
// iOS開(kāi)發(fā)中每個(gè)程序都有一個(gè)window作為應(yīng)用程序展示界面的平臺(tái)(iOS程序中一般只有一個(gè)主窗口)
// 如果在這個(gè)方法中創(chuàng)建window,那么應(yīng)用程序啟動(dòng)后就會(huì)去加載我們創(chuàng)建的window的內(nèi)容
// 創(chuàng)建UIWindow對(duì)象
self.window = UIWindow()
// 設(shè)置window的frame
self.window?.frame = UIScreen.mainScreen().bounds
// 設(shè)置rootViewController
self.window?.rootViewController = UIViewController()
// 設(shè)置window的背景顏色
self.window?.backgroundColor = UIColor.yellowColor()
// 將window作為應(yīng)用程序的主窗口
self.window?.makeKeyWindow()
return true
}
UIView的基本屬性和方法
class ViewController: UIViewController {
// 視圖控制器中View加載成功后會(huì)調(diào)用的方法
override func viewDidLoad() {
super.viewDidLoad()
//UIView是iOS中所有控件(視圖)直接或者間接的父類。所以UIView中屬性和方法,其他UIView的子類都擁有。
// 1.創(chuàng)建UIView對(duì)象
// 使用不帶參的構(gòu)造方法來(lái)創(chuàng)建UIView對(duì)象
var view1:UIView = UIView()
// 通過(guò)傳frame來(lái)創(chuàng)建一個(gè)UIView的對(duì)象
//view1 = UIView.init(frame: <#T##CGRect#>)
// 2.設(shè)置frame(所有的視圖想要顯示在界面上必須設(shè)置frame屬性) -> 默認(rèn)是(0,0,0,0)
// frame中坐標(biāo)是以手機(jī)頻幕的左上角為原點(diǎn)來(lái)計(jì)算的
// CGRect類型:是由一個(gè)通過(guò)x,y組成CGPoint結(jié)構(gòu)和一個(gè)由width和height組成的CGSize結(jié)構(gòu)體。通過(guò)組成的一個(gè)結(jié)構(gòu)體。
// CGRect -> CGPoint(x,y) + CGSize(width,height)
// UI中所有的結(jié)構(gòu)體都有一個(gè)對(duì)應(yīng)的Make方法,來(lái)快速的創(chuàng)建結(jié)構(gòu)體變量
// (x,y) 坐標(biāo)
// (width,height) 大小 ***
view1.frame = CGRect(x: 100, y: 100, width: 100, height: 100)
view1.frame = CGRectMake(50, 50, 100, 100)
// 3.addSubView方法 ***
// 將view1顯示在視圖控制器的view上
self.view.addSubview(view1)
// 4.背景顏色(默認(rèn)是白色、透明)
view1.backgroundColor = UIColor.cyanColor()
// 5.設(shè)置tag值(默認(rèn)值是0)
// tag值的作用是用來(lái)區(qū)分當(dāng)前界面上不同的視圖
view1.tag = 1
// 練習(xí):再創(chuàng)建一個(gè)視圖顯示在界面上(能在界面上看得見(jiàn))
// 注意:坐標(biāo)是相對(duì)的。視圖被添加到那個(gè)視圖上,那么坐標(biāo)就是相對(duì)于誰(shuí)來(lái)算的
var view2 = UIView.init(frame:CGRectMake(100 , 100, 100, 100))
// 設(shè)置背景顏色
view2.backgroundColor = UIColor.yellowColor()
// 顯示在界面
// self.view.addSubview(view2) // 視圖被添加到view上
view1.addSubview(view2) // 視圖被添加到view1上
}
UIView坐標(biāo)相關(guān)
// ===========center屬性==========
// 中心點(diǎn)的坐標(biāo)
print(view1.center)
// 改變中心點(diǎn)的坐標(biāo)會(huì)改變視圖的frame的x,y值;不會(huì)改變視圖的大小
view1.center = CGPointMake(220, 220)
print(view1.frame)
// ===========bounds屬性==========
// 1.默認(rèn)情況下,bounds中的坐標(biāo)都是(0,0),大小和frame的大小一樣
print(view1.bounds)
view1.bounds = CGRectMake(0, 0, 200, 200)
// 2.改變bounds的值的大小,會(huì)直接影響frame的大小;通過(guò)中心點(diǎn)不變而去影響frame的坐標(biāo)
print("center:\(view1.center)")
print("frame:\(view1.frame)")
// 3.改變bounds的坐標(biāo)不會(huì)影響frame的坐標(biāo)和大小;只會(huì)影響當(dāng)前視圖上的子視圖的原點(diǎn)位置
view1.bounds = CGRectMake(-10, -10, 200, 200)
print("center:\(view1.center)")
print("frame:\(view1.frame)")
// 在view1上添加一個(gè)子視圖
let view2 = UIView.init(frame: CGRectMake(0, 0, 80, 80))
view2.backgroundColor = UIColor.redColor()
view1.addSubview(view2)
// 總結(jié):一般不會(huì)去設(shè)置bounds的值。只會(huì)在需要拿到當(dāng)前視圖的大小,并且坐標(biāo)是(0,0)的情況下使用bounds屬性
// ===========transform(形變)==========
// 形變不管多少種形變對(duì)一個(gè)值進(jìn)行設(shè)置,都只形變最后一個(gè)
// 子類視圖會(huì)和父類視圖一起發(fā)生形變,前提是對(duì)父視圖做形變
// 1.縮放
// 參數(shù)1:x方向的縮放比例
// 參數(shù)2:y方向的縮放比例
view1.transform = CGAffineTransformMakeScale(0.6, 0.6)
// 2.旋轉(zhuǎn)
// 參數(shù):旋轉(zhuǎn)角度(相對(duì)PI的角度)
view1.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2)/2)
// 3.平移
// 參數(shù)1:在x方向的平移距離, x方向?yàn)檎?>往右移;為負(fù)->往左移
// 參數(shù)2:在y方向的平移距離, y方向?yàn)檎?>往下移;為負(fù)->往上移
view1.transform = CGAffineTransformMakeTranslation(-80, 200)
// 4.同時(shí)進(jìn)行多種形變
// 旋轉(zhuǎn)縮放
view1.transform = CGAffineTransformRotate(CGAffineTransformMakeScale(2, 0.6), CGFloat(M_PI_2)/2)
// 旋轉(zhuǎn)縮放平移
view1.transform = CGAffineTransformTranslate(view1.transform, 100, 20)
}
UIView動(dòng)畫(huà)
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 1.創(chuàng)建一個(gè)UIView對(duì)象
let view1 = UIView.init(frame: CGRectMake(100, 100, 100, 100))
view1.backgroundColor = UIColor.redColor()
self.view.addSubview(view1)
// // 2.UIView動(dòng)畫(huà)
// // 參數(shù)1:動(dòng)畫(huà)時(shí)間(單位:秒)- 傳一個(gè)Double類型的數(shù)值
// // 參數(shù)2:閉包,在這里面主要去設(shè)置動(dòng)畫(huà)結(jié)束時(shí)的狀態(tài)
//
// // 功能:將視圖原來(lái)的狀態(tài),在指定時(shí)間內(nèi)變成結(jié)束時(shí)的狀態(tài)
// UIView.animateWithDuration(10) { () -> Void in
// view1.transform = CGAffineTransformMakeRotation(CGFloat(M_2_PI))
// // 寫動(dòng)畫(huà)結(jié)束時(shí)的狀態(tài)
// // 只能改變視圖坐標(biāo)和大小相關(guān)屬性(包括frame、center、形變)、顏色、透明度
//
// // 通過(guò)動(dòng)畫(huà)效果將view1的坐標(biāo)和大小改成下面的狀態(tài)
// view1.frame = CGRectMake(100, 400, 40, 50)
//
// // 動(dòng)畫(huà)的改變視圖的透明度
// // 透明度:0(完全透明)~1(不透明),默認(rèn)是1
// view1.alpha = 1
//
//
// }
// 參數(shù)1:動(dòng)畫(huà)時(shí)間
// 參數(shù)2:設(shè)置動(dòng)畫(huà)結(jié)束時(shí)視圖狀態(tài)對(duì)應(yīng)的閉包
// 參數(shù)3:閉包的可選類型,這個(gè)閉包會(huì)在動(dòng)畫(huà)結(jié)束后自動(dòng)調(diào)用
UIView.animateWithDuration(3, animations: { () -> Void in
// 動(dòng)畫(huà)結(jié)束時(shí)視圖的狀態(tài)
view1.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_4))
}) { (b) -> Void in
// 動(dòng)畫(huà)結(jié)束后要執(zhí)行的操作
view1.transform = CGAffineTransformMakeRotation(CGFloat(M_2_PI))
// 動(dòng)畫(huà)的讓視圖的狀態(tài)回到最初的狀態(tài)
UIView.animateWithDuration(3, animations: { view1.transform = CGAffineTransformMakeRotation(CGFloat(0))
})
}
// 創(chuàng)建一個(gè)視圖view2
let view2 = UIView.init(frame: CGRectMake(100, 200, 80, 80))
view2.backgroundColor = UIColor.orangeColor()
self.view.addSubview(view2)
// 參數(shù)1:動(dòng)畫(huà)時(shí)間
// 參數(shù)2:延遲時(shí)間
// 參數(shù)3:動(dòng)畫(huà)選項(xiàng);Repeat選項(xiàng)可以是視圖通過(guò)動(dòng)畫(huà)的形式來(lái)回到原狀態(tài)和動(dòng)畫(huà)結(jié)束狀態(tài)之間來(lái)回切換,但是從結(jié)束狀態(tài)回到原來(lái)狀態(tài)的時(shí)候是沒(méi)有動(dòng)畫(huà)的。Autoreverse使用自動(dòng)動(dòng)畫(huà)的回到原來(lái)的狀態(tài) ****在給參數(shù)3寫參數(shù)的時(shí)候需要先寫一個(gè)空的數(shù)組[],然后先空格在點(diǎn)出系統(tǒng)的選項(xiàng),根據(jù)需要選取
// 參數(shù)4:設(shè)置動(dòng)畫(huà)結(jié)束視圖狀態(tài)對(duì)應(yīng)的閉包
// 參數(shù)5:動(dòng)畫(huà)結(jié)束后需要執(zhí)行的操作隊(duì)形的閉包
// CurveLinear不停頓
UIView.animateWithDuration(1, delay: 1, options: [ .Repeat, .CurveLinear], animations: { () -> Void in
view2.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
}, completion: nil)
}
}
如何獲取一個(gè)視圖上的所有的子視圖和通過(guò)一個(gè)視圖獲取指定視圖的父視圖
// a.獲取一個(gè)視圖上所有的子視圖
let subviews = self.view.subviews
// b.通過(guò)一個(gè)視圖獲取指定視圖的父視圖
// 關(guān)鍵字superview
let view11 = view2.superview
view11?.backgroundColor = UIColor.orangeColor()
let view3 = view1?.superview
view3?.backgroundColor = UIColor.lightGrayColor()
// c.通過(guò)父視圖去移除一個(gè)視圖(將一個(gè)視圖從它的父視圖上移除)
// 將view2從它的父視圖上移除;如果將一個(gè)視圖從父視圖上移除,那么這個(gè)視圖上的所有的子視圖也會(huì)跟著一起移除
//view1!.removeFromSuperview()
// d.獲取當(dāng)前應(yīng)用的主窗口(可以通過(guò)應(yīng)用程序界面上所有的視圖,直接拿到當(dāng)前應(yīng)用的唯一的主窗口,但是前提是當(dāng)前這個(gè)視圖在獲取主窗口的時(shí)候已經(jīng)顯示在界面上)
let window = view1?.window
print(window)
}
// 界面已經(jīng)顯示出來(lái)的時(shí)候會(huì)調(diào)用
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
// 在這兒view4已經(jīng)顯示在界面上了,所以可以拿到window
let window = self.view4.window
print(window)
}
視圖的層次關(guān)系
默認(rèn)情況下,后添加的視圖會(huì)覆蓋先添加的視圖(前提:后添加的視圖和先添加的視圖有公共部分)
// 1. 將顯示在底層的視圖顯示在上面
// 前提是:放在創(chuàng)建所有視圖結(jié)束后
// 將指定視圖顯示在最上面
// self.view.bringSubviewToFront(view1)
// 將指定視圖顯示在最下面
// self.view.sendSubviewToBack(view4)
如果被插入的視圖在插入前沒(méi)有添加到界面,插入的時(shí)候會(huì)現(xiàn)將視圖添加到界面上,然后再改變層次關(guān)系
// 3.將指定的視圖插入到另外一個(gè)視圖的上面
// self.view.insertSubview(view5, aboveSubview: view1)
// 4.將指定的視圖插入到另外一個(gè)視圖的下面
self.view.insertSubview(view5, belowSubview: view1)
UILabel
UILabel是一個(gè)類,繼承自UIView;UIVIew的相關(guān)屬性和方法,UILabel也擁有
//*************實(shí)際開(kāi)發(fā)中常用重點(diǎn)***************
// 使用自己的字體庫(kù)的步驟
// a.將ttf字體文件拖到工程中
// b.將字體文件名在info.plist文件中通過(guò)"Fonts provided by applocation"加添進(jìn)去
// c.找到被添加的字體對(duì)應(yīng)的字體名(1.通過(guò)字體冊(cè)去看 2.通過(guò)打印familyNames去找)
// d.通過(guò)下面的方法去使用字體
// 通過(guò)字體名和字號(hào)來(lái)確定字體
label1.font = UIFont(name: "AaShuangYuzuo", size: 25)
// ===========label專有屬性和方法===========
// 1.text屬性(label的核心屬性) 顯示在label上的文字,類型字符串
label1.text = "hellow world,你好世界,你好嗎 不好嗎"
print(label1.text)
// 2.font屬性
// 設(shè)置label上顯示的文字的字體
label1.font = UIFont.systemFontOfSize(30) //系統(tǒng)字體,可以設(shè)置字體大小
label1.font = UIFont.systemFontOfSize(30, weight: 0.8) //系統(tǒng)字體,可以設(shè)置字體大小,同時(shí)可以設(shè)置文字的粗細(xì)(粗細(xì)取值范圍0~1)
label1.font = UIFont.boldSystemFontOfSize(30) //系統(tǒng)黑體,可以設(shè)置字體大小
label1.font = UIFont.italicSystemFontOfSize(30) //系統(tǒng)斜體,可以設(shè)置字體大小
// 獲取當(dāng)前應(yīng)用程序所支持的所有的字體名
let fontArray = UIFont.familyNames()
print(fontArray)
// 3.textColor屬性
// 文字顏色屬性
label1.textColor = UIColor.yellowColor()
// 4.shadowColor陰影顏色屬性
label1.shadowColor = UIColor.grayColor() //陰影顏色
label1.shadowOffset = CGSizeMake(0, 0) //陰影的偏移
// 5.設(shè)置對(duì)齊方式
// .Left //左對(duì)齊(默認(rèn))
// .Right //右對(duì)齊
// .Center //居中
label1.textAlignment = .Left
// 6.設(shè)置文字高亮顏色
// label正常情況下不是高亮狀態(tài)
label1.highlightedTextColor = UIColor.redColor()
// 設(shè)置label的狀態(tài)是否是高亮,當(dāng)在點(diǎn)擊文字的時(shí)候文字顏色會(huì)變成高亮設(shè)置的顏色 , 前提是設(shè)置為true
label1.highlighted = false
label1.text = "his determines the number of lines "
// 7.設(shè)置行數(shù)
// 行數(shù)設(shè)置為N(>= 1),在label足夠高,文字足夠多的情況下就用N行顯示
// 當(dāng)行數(shù)設(shè)置為0的時(shí)候,label會(huì)根據(jù)高度和文字自動(dòng)換行
label1.numberOfLines = 1
// 8.設(shè)置換行模式
//ByCharWrapping //以字符為單位換行,如果文字在指定行數(shù)內(nèi)顯示不全,后面的內(nèi)容直接省略不顯示(沒(méi)有省略號(hào),會(huì)將單詞截?cái)?
//ByWordWrapping //以單詞為單位換行,如果文字在指定行數(shù)內(nèi)顯示不全,后面的內(nèi)容直接省略不顯示(沒(méi)有省略號(hào))
//ByClipping //以單詞為單位換行,如果文字在指定行數(shù)內(nèi)顯示不全,后面的內(nèi)容直接省略不顯示(沒(méi)有省略號(hào),會(huì)將單詞截?cái)?
//ByTruncatingTail、ByTruncatingMiddle、ByTruncatingHead //以單詞為單位換行,顯示不全的部分會(huì)在不同的位置使用省略號(hào)代替
label1.lineBreakMode = .ByTruncatingHead
// 9.讓文字通過(guò)自動(dòng)設(shè)置字體大小,讓文字可以在label上完整的顯示(只針對(duì)行數(shù)為一行才有效)
label1.adjustsFontSizeToFitWidth = true

屏幕快照 2016-08-14 下午5.03.59.png
UIImageView
// UIImageView是繼承自UIVIew的一個(gè)類,UIView的屬性和方法UIImageView都擁有
1.image屬性(核心屬性)
// a.通過(guò)圖片名去創(chuàng)建一個(gè)圖片對(duì)象(最常用),這個(gè)方法要求:圖片必須導(dǎo)入到工程中,如果圖片是png格式圖片,圖片名的后綴可以省略,但是其他格式的圖片都不能省略
imageView1.image = UIImage.init(named: "back2.jpg")
// b.通過(guò)圖片地址去創(chuàng)建一張圖片,要求圖片必須導(dǎo)入到工程中
// NSBundle.mainBundle() 拿到包文件
// 參數(shù)1:文件名
// 參數(shù)2:文件后綴
// 這個(gè)方法后綴不管什么格式,后綴都不能省略
let path = NSBundle.mainBundle().pathForResource("back2", ofType: "jpg") // 常用這個(gè)方法
// 也可以用這個(gè)方式來(lái)寫 NSBundle.mainBundle().pathForResource("back2.jpg", ofType: nil)
if let path2 = path {
imageView1.image = UIImage.init(contentsOfFile: path2)
}
else {
imageView1.image = nil
print("找不到對(duì)應(yīng)圖片")
}
設(shè)置高亮狀態(tài)下的圖片
imageView1.highlightedImage = UIImage.init(named: "button_right")
//設(shè)置imageView1為高亮狀態(tài)(true -> 高亮),(false -> 不是高亮)
imageView1.highlighted = false
imageView1的幀動(dòng)畫(huà)
// 4.imageView1的幀動(dòng)畫(huà)
// a.設(shè)置動(dòng)畫(huà)數(shù)組
// 創(chuàng)建圖片數(shù)組
var imageArray:[UIImage] = [UIImage]()
for item in 1...18 {
let imageName = "DOVE " + "\(item).png"
let image = UIImage.init(named: imageName)
imageArray.append(image!)
}
// 設(shè)置動(dòng)畫(huà)數(shù)組
imageView1.animationImages = imageArray
// b.設(shè)置動(dòng)畫(huà)時(shí)間(單位:秒)
imageView1.animationDuration = 0.00001
// c.設(shè)置重復(fù)次數(shù) (N>=1) 就重復(fù)N次
// 如果設(shè)置為0,就可以無(wú)限循環(huán)播放動(dòng)畫(huà)
imageView1.animationRepeatCount = 0
// d.開(kāi)始動(dòng)畫(huà)
imageView1.startAnimating()
// e.停止動(dòng)畫(huà)
// imageView1.stopAnimating()
// f.判斷是否正在播放動(dòng)畫(huà)
let ret = imageView1.isAnimating()
if ret {
print("正在播放幀動(dòng)畫(huà)")
定時(shí)器NSTimer
class ViewController: UIViewController {
// 將imageView1聲明成類的屬性,可以在當(dāng)前類的任何變量方法中使用
var imageView1:UIImageView = UIImageView()
override func viewDidLoad() {
super.viewDidLoad()
// 搭建界面
self.creatUI()
// 創(chuàng)建定時(shí)器
// 參數(shù)1: 定時(shí)時(shí)間(單位:秒)
// 參數(shù)2: 調(diào)用方法的對(duì)象 (方法是參數(shù)3的方法) 當(dāng)前類的方法就寫self
// 參數(shù)3: 定時(shí)時(shí)間到了之后自動(dòng)調(diào)用的方法 ()
// 參數(shù)4: nil
// 參數(shù)5: 是否重復(fù) self每隔參數(shù)1的時(shí)間去調(diào)用一個(gè)timmer函數(shù)(每隔0.03秒執(zhí)行一個(gè)self.timmer())
// 如果定時(shí)器到時(shí)調(diào)用的方法帶參,只能帶一個(gè)參,并且參數(shù)類型是NSTimer類型,因?yàn)檫@個(gè)方法的實(shí)參是當(dāng)前創(chuàng)建出來(lái)的NSTimer對(duì)象
let time = NSTimer.scheduledTimerWithTimeInterval(0.03, target: self, selector: Selector("timmer2:"), userInfo: "aaa", repeats: true)
// 繼續(xù)
// time.fireDate = NSDate.distantPast()
// 暫停
time.fireDate = NSDate.distantFuture()
}
// MARK: - 定時(shí)器到時(shí)會(huì)調(diào)用的方法
// 帶參的方法只能帶一個(gè)參數(shù);類型必須是NSTimer
func timmer2(timmer:NSTimer) {
print(timmer.userInfo)
}
func timmer() {
//print("到時(shí)")
//改變圖片的位置
//1.先拿到圖片原來(lái)的位置
let frame = imageView1.frame
imageView1.frame = CGRectMake(frame.origin.x + 10, frame.origin.y, frame.size.width, frame.size.height)
if imageView1.frame.origin.x > self.view.frame.size.width {
imageView1.frame.origin.x = -30
}
}
// MARK: - 創(chuàng)建界面
func creatUI() {
// 創(chuàng)建一個(gè)UIImageView對(duì)象
imageView1 = UIImageView.init(frame: CGRectMake(30, 100, 121, 96))
//imageView1.backgroundColor = UIColor.redColor()
// 添加到界面上
self.view.addSubview(imageView1)
// 設(shè)置靜態(tài)圖片
//imageView1.image = UIImage.init(named: "DOVE 1")
// 創(chuàng)建動(dòng)畫(huà)數(shù)組
var imageArray:[UIImage] = [UIImage]()
for item in 1...18 {
let imageName = UIImage.init(named: "DOVE " + "\(item)")
imageArray.append(imageName!)
}
imageView1.animationImages = imageArray
// 設(shè)置動(dòng)畫(huà)相關(guān)屬性
imageView1.animationRepeatCount = 0
imageView1.animationDuration = 0.2
// 開(kāi)始動(dòng)畫(huà)
imageView1.startAnimating()
}
UIButton
// UIButton是繼承自UIVIew的一個(gè)類,UIView的屬性和方法UIButton都擁有
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// UIButton:UIControl:UIView
self.imageButton()
//self.textAndImageButton()
}
//MARK: - 文字和圖片同時(shí)存在
func textAndImageButton() {
// ============從UIView繼承下來(lái)的屬性=============
// (1)圖片在左文字在右
// 1.創(chuàng)建button對(duì)象
let button = UIButton.init(frame: CGRectMake(100, 100, 200, 100))
// 2.添加到界面上
self.view.addSubview(button)
// 3.設(shè)置圖片屬性
button.setImage(UIImage.init(named: "player_down_1"), forState: .Normal)
// 4.設(shè)置文字屬性
button.setTitle("戰(zhàn)士", forState: .Normal)
button.setTitleColor(UIColor.redColor(), forState: .Normal)
// (2)圖片在下層,文字在上層
// 1.創(chuàng)建button對(duì)象
let button2 = UIButton.init(frame: CGRectMake(100, 250, 200, 100))
// 2.添加到界面上
self.view.addSubview(button2)
// 3.設(shè)置按鈕的背景圖片
// setBackgroundImage
button2.setBackgroundImage(UIImage.init(named: "player_down_1"), forState: .Normal)
// 4.設(shè)置按鈕文字
button2.setTitle("戰(zhàn)士", forState: .Normal)
button2.setTitleColor(UIColor.blueColor(), forState: .Normal)
}
// MARK: - 圖片按鈕
func imageButton() {
// ============從UIView繼承下來(lái)的屬性=============
// 1.創(chuàng)建button對(duì)象
let button = UIButton.init(frame: CGRectMake(100, 100, 100, 100))
// 2.添加到界面上
self.view.addSubview(button)
// ============按鈕專有的屬性=============
// 1.設(shè)置按鈕上的圖片
// 參數(shù)1:顯示在按鈕上的圖片
// 參數(shù)2:按鈕狀態(tài)
// 設(shè)置按鈕正常狀態(tài)下的圖片
button.setImage(UIImage.init(named: "map"), forState: .Normal)
// 設(shè)置按鈕高亮狀態(tài)下的圖片
button.setImage(UIImage.init(named: "button_down"), forState: .Highlighted)
// 設(shè)置按鈕選中狀態(tài)下的圖片
button.setImage(UIImage.init(named: "button_up"), forState: .Selected)
// 是否是選中狀態(tài)
button.selected = false
// 關(guān)閉用戶交互
// 按鈕默認(rèn)是true -> 可以進(jìn)行用戶交互
// button.userInteractionEnabled = false
// enabled 如果設(shè)置為false,控件不能工作
// button.enabled = true
}
// MARK: - 文字按鈕
func textButton() {
// ============從UIView繼承下來(lái)的屬性=============
// 1.創(chuàng)建button對(duì)象
let button = UIButton.init(frame: CGRectMake(100, 100, 150, 80))
// 2.添加到界面上
self.view.addSubview(button)
// 3.設(shè)置背景顏色
button.backgroundColor = UIColor.redColor()
// 系統(tǒng)的按鈕中有一個(gè)label專門用來(lái)負(fù)責(zé)顯示文字,還有一個(gè)imageView專門用來(lái)負(fù)責(zé)顯示圖片
// button.titleLabel
// button.imageView
// ============按鈕專有的屬性=============
// 1.文字按鈕
// a.設(shè)置文字屬性
// 給按鈕設(shè)置文字的時(shí)候,必須使用下面這個(gè)方法來(lái)給按鈕的不同狀態(tài)去設(shè)置文字
// 參數(shù)1:需要顯示在按鈕上的文字
// 參數(shù)2:按鈕狀態(tài)。一個(gè)按鈕有:正常狀態(tài)(按鈕處于不被操作的時(shí)候的狀態(tài))、高亮狀態(tài)(按鈕被按下沒(méi)有松開(kāi)時(shí)的狀態(tài))、選中狀態(tài)(按鈕按下就一直處于選中時(shí)的狀態(tài),松開(kāi)也不會(huì)彈起)
// 設(shè)置按鈕正常狀態(tài)下的文字為"正常";如果只設(shè)置正常狀態(tài)下的內(nèi)容,那么其他狀態(tài)的效果和正常狀態(tài)一樣
button.setTitle("正常", forState: .Normal)
// 設(shè)置按鈕高亮狀態(tài)下的文字
button.setTitle("高亮", forState: .Highlighted)
// 設(shè)置按鈕選中狀態(tài)下的文字
button.setTitle("選中", forState: .Selected)
// 讓按鈕成為選中狀態(tài)
// true -> 選中: false -> 不選中(默認(rèn))
button.selected = false
// b.設(shè)置按鈕上文字顏色
// 設(shè)置正常狀態(tài)下文字顏色
button.setTitleColor(UIColor.blackColor(), forState: .Normal)
// 設(shè)置高亮狀態(tài)下文字顏色
button.setTitleColor(UIColor.blueColor(), forState: .Highlighted)
// c.文字字體
button.titleLabel?.font = UIFont.systemFontOfSize(30)
// d.設(shè)置對(duì)齊方法
button.titleLabel?.textAlignment = .Left
// 總結(jié):除了按鈕上的文字和文字顏色以外,其他和文字相關(guān)的屬性都可以使用button上的titleLabel去設(shè)置
}
}
UIButton的核心屬性
UITextField
// UITextField是繼承自UIVIew的一個(gè)類,UIView的屬性和方法UITextField都擁有
//============textField專有屬性=============
// a.文字相關(guān)
// 1.text屬性
textField.text = "輸入框"
// 通過(guò)這個(gè)屬性去拿到textField中的輸入信息
print(textField.text)
// 2.placeHolder (點(diǎn)擊輸入框就沒(méi)有請(qǐng)輸入賬號(hào)了,提示作用)
textField.placeholder = "請(qǐng)輸入賬號(hào)"
// 3.是否密文輸入
// true -> 密文輸入
// false -> 明文輸入
textField.secureTextEntry = false
// 4.設(shè)置文字顏色
textField.textColor = UIColor.redColor()
// 5.設(shè)置字體
textField.font = UIFont.systemFontOfSize(20)
// b.顯示相關(guān)
// 1.設(shè)置邊框樣式
//None 無(wú)邊框
//Line 黑色的直角邊框
//Bezel 直角表框帶凹陷效果
//RoundedRect 淺灰色帶圓角的邊框
textField.borderStyle = .RoundedRect
// 2.開(kāi)始編輯的時(shí)候是否清空輸入框
// true -> 每次點(diǎn)擊輸入框都將輸入框中原來(lái)的文字清空
// false -> 每次點(diǎn)擊輸入框都將輸入框中原來(lái)的文字不清空
textField.clearsOnBeginEditing = true
// 3.設(shè)置清除按鈕模式
// Never 清除按鈕一直不顯示
// Always 清除按鈕一直顯示(前提是輸入框中有文字的時(shí)候)
// UnlessEditing 在非編輯狀態(tài)的時(shí)候顯示 (編輯狀態(tài)的時(shí)候,輸入框中有光標(biāo))
// WhileEditing 在編輯狀態(tài)的時(shí)候顯示
textField.clearButtonMode = .WhileEditing
// 4.設(shè)置左視圖
// 使用圖片作為左視圖
let leftImageView = UIImageView.init(image: UIImage.init(named: "player_down_1"))
// 左視圖中frame中坐標(biāo)設(shè)置無(wú)效,只有大小的設(shè)置有效
leftImageView.frame = CGRectMake(0, 0, 35, 35)
textField.leftView = leftImageView
// 使用文字作為左視圖
let leftLabel = UILabel.init(frame: CGRectMake(0, 0, 50, 40))
leftLabel.text = "登陸"
leftLabel.textAlignment = .Center
// textField.leftView = leftLabel
// 如果想要左視圖顯示出來(lái),必須設(shè)置左視圖的顯示模式
textField.leftViewMode = .Always
// c.鍵盤相關(guān)
// 1.設(shè)置鍵盤上的回車按鈕的類型
textField.returnKeyType = .Next
// 2.設(shè)置鍵盤類型
// 不同的輸入框設(shè)置不同的鍵盤的樣式
textField.keyboardType = .NumbersAndPunctuation
// 3.設(shè)置輸入鍵盤界面(自定義鍵盤,不使用系統(tǒng)的鍵盤)
// 自定義的輸入界面 x,y坐標(biāo)跟寬度是無(wú)效的,只有設(shè)置高度有效 (寬度是跟界面的寬度相等)
let inputView = UIView.init(frame: CGRectMake(0, 0, 0, 256))
inputView.backgroundColor = UIColor.greenColor()
textField.inputView = inputView
// 4.設(shè)置二級(jí)鍵盤
//二級(jí)界面的輸入界面 x,y坐標(biāo)跟寬度是無(wú)效的,只有設(shè)置高度有效 (寬度是跟界面的寬度相等)
let accessoryView = UIView.init(frame: CGRectMake(0, 0, 0, 50))
accessoryView.backgroundColor = UIColor.purpleColor()
textField.inputAccessoryView = accessoryView
}
}
UITextFeld代理
class ViewController: UIViewController {
// MARK: - 生命周期
override func viewDidLoad() {
super.viewDidLoad()
self.creatTextField()
}
// MARK: - textField
func creatTextField() {
// 1.創(chuàng)建textField對(duì)象
let textField = UITextField.init(frame: CGRectMake(100, 100, 250, 60))
// 2.顯示在界面上
self.view.addSubview(textField)
// 3.設(shè)置背景顏色
textField.backgroundColor = UIColor.yellowColor()
// 4.設(shè)置代理
// textField委托 delegate代理
textField.delegate = self //self指的是當(dāng)前類
textField.text = "134"
// 顯示清除按鈕
textField.clearButtonMode = .Always
// 再創(chuàng)建一個(gè)textField
// 1.創(chuàng)建textField對(duì)象
let textField1 = UITextField.init(frame: CGRectMake(100, 200, 250, 60))
// 2.顯示在界面上
self.view.addSubview(textField1)
// 3.設(shè)置背景顏色
textField1.backgroundColor = UIColor.yellowColor()
// 4.設(shè)置代理
//textField1.delegate = self
textField1.text = "222"
}
}
// 讓ViewController遵守UITextFieldDelegate,實(shí)現(xiàn)協(xié)議內(nèi)容
extension ViewController: UITextFieldDelegate {
// 當(dāng)按鍵盤的回車鍵的時(shí)候調(diào)用這個(gè)方法
// 返回值:按回車鍵是否可以將聯(lián)想的內(nèi)容顯示在輸入框中,一般返回true
func textFieldShouldReturn(textField: UITextField) -> Bool {
print("回車")
// 收起鍵盤
textField.resignFirstResponder()
return true
}
// 在鍵盤上每次點(diǎn)擊一個(gè)鍵,都會(huì)調(diào)用這個(gè)方法
// 參數(shù)1:委托
// 參數(shù)2:當(dāng)前點(diǎn)擊的按鍵對(duì)應(yīng)的值在輸入框中的字符中所在的范圍
// 參數(shù)3:當(dāng)前在鍵盤上點(diǎn)擊的按鍵對(duì)應(yīng)的值
// 返回值:是否將從鍵盤上輸入的內(nèi)容顯示到textField上
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
print(range)
print(string)
// 如果是數(shù)字就不能顯示到textField上
let int = Int(string)
if int != nil {
return false
}
return true
}
// textField已經(jīng)編輯結(jié)束會(huì)調(diào)用這個(gè)方法
func textFieldDidEndEditing(textField: UITextField) {
print("編輯結(jié)束")
}
// 在textField將要結(jié)束編輯的時(shí)候調(diào)用.并且可以設(shè)置是否可以結(jié)束編輯
func textFieldShouldEndEditing(textField: UITextField) -> Bool {
// 如果textField中字符個(gè)數(shù)大于7就可以結(jié)束編輯,否則不能結(jié)束編輯
// if textField.text!.characters.count > 7 {
//
// return true
// }
return true
}
// 開(kāi)始編輯的時(shí)候調(diào)用這個(gè)方法
func textFieldDidBeginEditing(textField: UITextField) {
print("開(kāi)始編輯")
}
// 開(kāi)始編輯的時(shí)候調(diào)用這個(gè)方法,并且可以設(shè)置是否讓當(dāng)前的textField是否可以編輯
// 參數(shù):委托
// 返回值:是否可以開(kāi)始編輯,true->可以編輯,false->不可以編輯
func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
print(textField.text)
return true
}
// 返回值:點(diǎn)擊清空按鈕是否可以將textField中的內(nèi)容清空。true -> 清空, false -> 不可以清空
func textFieldShouldClear(textField: UITextField) -> Bool {
return true
}
}
切圓角
// 切圓角(所有的視圖都可以切圓角)
// 每個(gè)視圖都有一個(gè)layer,專門負(fù)責(zé)視圖的顯示。
// 1.讓layer可以裁剪
textField.layer.masksToBounds = true
// 2.設(shè)置圓角半徑
textField.layer.cornerRadius = 30
// 加邊框
// 1.設(shè)置邊框的寬度
textField.layer.borderWidth = 2
// 2.設(shè)置邊框顏色 在最后 .CGColor可以將UIColor轉(zhuǎn)換成CGColor
textField.layer.borderColor = UIColor.lightGrayColor().CGColor