UI階段第一周筆記

程序的啟動(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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,414評(píng)論 4 61
  • (1) 我知道很多積極生活的方法,制定目標(biāo),追求理想,調(diào)整心態(tài),去改變能夠改變的,去接受無(wú)可奈何的。一直以來(lái),我都...
    小Oly英語(yǔ)啟蒙閱讀 1,496評(píng)論 1 2
  • 流逝的歲月好似消失的童話,當(dāng)我們回想時(shí)在也無(wú)法拾起,因?yàn)槲覀冊(cè)僖矡o(wú)法穿越時(shí)空,將原有的美好定格在那一刻,青春是一場(chǎng)...
    車載導(dǎo)航娛樂(lè)系統(tǒng)閱讀 159評(píng)論 0 0
  • C++第八天 今天講的主要是list和map容器。將涉及到的函數(shù)也都講到了,都有案例。今天講的內(nèi)容已經(jīng)盡量添加備注...
    雨打梨花閉門寒閱讀 244評(píng)論 0 0
  • 2016年8月20日我和我們班的每位同學(xué)相聚在新鄉(xiāng)市第三十中學(xué)七(一)班。在這個(gè)以李冠婧老師為首的大家庭中,我們七...
    辛辛學(xué)子閱讀 897評(píng)論 1 0

友情鏈接更多精彩內(nèi)容