UI階段第二天

一臉懵逼的我

UIView父子視圖

還是通過代碼來理解吧:

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
       
        //1.創建一個UIView對象
        let redView = UIView.init(frame: CGRectMake(100, 100, 200, 200))
        //2.設置背景顏色
        redView.backgroundColor = UIColor.redColor()
        
        //3.添加到界面上
        //self.view就是redView的父視圖,redView就是self.view的子視圖
        self.view.addSubview(redView)
        
        //4.設置tag值,默認都是0.設tag值的時候值必須要大于0
        //tag的作用是用來區分界面上不同的視圖
        redView.tag = 100
        
        //MARK: - 父子視圖的特點和方法
        //再創建一個黃色視圖
        let yellowView = UIView.init(frame: CGRectMake(0, 0, 50, 50))
        yellowView.backgroundColor = UIColor.yellowColor()
        yellowView.tag = 101
        
        //1.一個視圖只有一個父視圖,可以有多個子視圖
        //連續將同一個視圖添加到兩個視圖上,最后一次添加有效
        redView.addSubview(yellowView)
        self.view.addSubview(yellowView)
        
        //2.獲取一個視圖的父視圖
        let superView = redView.superview
        superView?.backgroundColor = UIColor.greenColor()
        
        //3.獲取一個視圖的所有的子視圖
        let subViews = self.view.subviews
        //拿到所有的子視圖中的紅色視圖和黃色視圖
        //a.
        for item in subViews {
            
            //判斷item是否是UILabel類型的。如果是就返回true,如果不是就返回false
            if item.isKindOfClass(UILabel.self) {
                print(item)
            }
        }
        //b.
        for item in subViews {
            
            if item.tag == 100 {
                print("紅色視圖")
                //將紅色視圖的背景顏色變成橙色
                item.backgroundColor = UIColor.orangeColor()
            }
            
            if item.tag == 101 {
                
                print("黃色視圖\(item)")
            }
        }
        
        //4.通過tag值拿到指定的子視圖
        let subView2 = self.view.viewWithTag(101)
        subView2?.frame.origin.y = 100
        
    }
}

視圖的層次關系

代碼示例:

mport UIKit

class ViewController: UIViewController {

    //MARK: - 生命周期方法
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.creatUI()
    }
    
    //MARK: - 創建界面
    func creatUI() {
        
        //結論:在一個視圖上,添加多個子視圖的時候,子視圖之間如果有公共的部分。那么后添加的子視圖會覆蓋先添加的
        //1.一般情況下,如果想要將一個視圖顯示在最下面,就最先添加。想要顯示在最上面就最后添加
        //創建視圖
        let view1 = self.creatView(CGRectMake(50, 100, 100, 100), backColor: UIColor.yellowColor())
        let view2 = self.creatView(CGRectMake(100, 150, 100, 100), backColor: UIColor.redColor())
        let view3 = self.creatView(CGRectMake(150, 200, 100, 100), backColor: UIColor.greenColor())
        let view4 = self.creatView(CGRectMake(180, 130, 100, 100), backColor: UIColor.purpleColor())
        
        
        //2.將指定的視圖放到最上層
        self.view.bringSubviewToFront(view2)
        
        //3.將指定的視圖放到最下層
        self.view.sendSubviewToBack(view2)
        
        //4.將指定的視圖插入到另一個視圖的上面
        self.view.insertSubview(view2, aboveSubview: view3)
        
        //5.將指定的視圖插入到另外一個視圖的下面
        self.view.insertSubview(view2, belowSubview: view1)
    }
    
    //創建視圖
    func creatView(frame:CGRect,backColor:UIColor)->UIView {
        //創建視圖對象
        let subView = UIView.init(frame: frame)
        //設置背景顏色
        subView.backgroundColor = backColor
        //添加到界面上
        self.view.addSubview(subView)
        //將創建的視圖返回
        return subView
    }

}

UIView動畫

代碼示例:

import UIKit

class ViewController: UIViewController {

    //MARK: - 屬性
    let subView = UIView()
    let subView2: UIView? = nil
    
    //MARK: - 生命周期
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //創建視圖
        subView.frame = CGRectMake(0, 0, 100, 100)
        subView.center = self.view.center
        subView.backgroundColor = UIColor.greenColor()
        self.view.addSubview(subView)
        
        
        //切圓角
        self.layerAction()
        
        //使用動畫
        self.UIViewAnimation4()
    }
    
    //MARK: - Layer屬性
    func layerAction() {
        //layer屬性是負責視圖的形狀(顯示)
        
        //1.切圓角
        //當圓角的值為正方形的寬的一半,就可以切一個圓
        self.subView.layer.cornerRadius = 50
        
        //2.設置邊框
        self.subView.layer.borderWidth = 3
        self.subView.layer.borderColor = UIColor.redColor().CGColor
        
        
    }
    
    
    
    //MARK: - 動畫方法
    //UIView的動畫使用來動畫的改變視圖的frame相關屬性、背景顏色、透明度
    
    
    //方法4:
    func UIViewAnimation4() {
        
        //參數1:動畫時間
        //參數2:延遲時間
        //參數3:彈簧的壓力系數
        //參數4:彈簧初始的加速度
        //參數5:選項
        //參數6:設置動畫結束時視圖的狀態
        //參數7:動畫結束后要執行的閉包
        UIView.animateWithDuration(2, delay: 1, usingSpringWithDamping: 0.1, initialSpringVelocity: 0, options: [ .Repeat, .Autoreverse], animations: {
            
            //注意:對于有圓角的視圖,改變大小而又不影響形狀,只能通過形變去縮放。不能直接改變frame中的size
                self.subView.transform = CGAffineTransformMakeScale(0.5, 0.5)
            
            }, completion: nil)
    }
    
    
    
    //方法3:
    func UIViewAnimation3() {
        
        //參數1:動畫時間
        //參數2:延遲時間
        //參數3:選項,Repeat->動畫重復執行,Autoreverse->自動回到動畫開始的狀態
        //參數4:設置動畫結束時視圖狀態的閉包
        //參數5:整個動畫過程完成后需要執行的閉包
        UIView.animateWithDuration(2, delay: 1, options: [ .Repeat, .Autoreverse], animations: {
            
                self.subView.transform = CGAffineTransformMakeTranslation(0, -200)
            
            }, completion: nil)
    }
    
    
    //方法2:
    func UIViewAnimation2(){
        
        //參數3:整個動畫完成后會自動調用這個閉包
        UIView.animateWithDuration(2, animations: { 
            
                self.subView.transform = CGAffineTransformMakeTranslation(0, -200)
            
            }) { (_) in
                
                //寫動畫結束后需要執行的代碼
                UIView.animateWithDuration(2, animations: { 
                    self.subView.transform = CGAffineTransformMakeTranslation(0, 0)
                })
                
        }
        
    }
    
    //方法1:
    func UIViewAnimation1() {
        
        //功能:執行這個方法前視圖的狀態,動畫的切換到閉包里面設置的最終狀態
        //參數1:動畫時間(單位:秒)
        //參數2:閉包,設置動畫結束時視圖的狀態
        UIView.animateWithDuration(2) {
            
            //在這兒來設置視圖動畫結束時的狀態
            //a.動畫的改變視圖的坐標
            self.subView.frame.origin.y = 50
            
            //b.動畫的改變視圖的大小
            //self.subView.frame.size = CGSizeMake(50, 50)
            self.subView.transform = CGAffineTransformMakeScale(0.5, 0.5)
            
            //c.動畫的改變視圖的背景顏色
            self.subView.backgroundColor = UIColor.redColor()
            
            //d.動畫的改變視圖的透明度(0~1)
            self.subView.alpha = 0.3
            
        }

    }
    
}

UILabel基礎

代碼示例:

import UIKit

class ViewController: UIViewController {

    //MARK: - 生命周期
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.creatLabel()
    }

    //MARK: - 創建Label
    func creatLabel() {
        
        //UILabel:UIView -> UIView的屬性和方法,UILabel都擁有
        //=======從UIView繼承下來的屬性=======
        //1.創建UILabel對象
        let label = UILabel.init(frame: CGRectMake(100, 100, 200, 300))
        //2.添加到界面上
        self.view.addSubview(label)
        //3.設置背景顏色
        label.backgroundColor = UIColor.yellowColor()
        
        //========UILabel的專有屬性=========
        //1.text屬性
        //設置label上顯示的文字
        label.text = "hello world 你好世界"
        //拿到label上當前顯示的文字
        print(label.text)
        
        //2.設置字體(字體大小默認是:17)
        //使用系統字體,設置字體大小
        label.font = UIFont.systemFontOfSize(17)
        
        //使用系統字體,設置字體大小和粗細
        //參數1:字體大小
        //參數2:字體粗細(小于1)
        label.font = UIFont.systemFontOfSize(17, weight: 0.2)
        
        //使用系統黑體,設置字體大小
        label.font = UIFont.boldSystemFontOfSize(17)
        
        //使用系統斜體,設置字體大小
        label.font = UIFont.italicSystemFontOfSize(17)
        
        //獲取系統所有字體的字體名
        //75
        print(UIFont.familyNames(),UIFont.familyNames().count)
        //參數1:字體名
        //參數2:字體大小
        label.font = UIFont.init(name: "FZJKai-Z03S", size: 17)
        
        //總結使用自己的字體的步驟:
        //1.將ttf文件拖到工程中
        //2.在info.plist文件中添加鍵值對"Fonts provided by application",將字體添加到系統字體庫中
        //3.通過提供字體名的構造方法去創建字體(先要找到自己添加的字體的字體名)
        
        //3.設置文字顏色
        label.textColor = UIColor.redColor()
        
        //4.設置陰影顏色
        label.shadowColor = UIColor.blackColor()
        //5.設置陰影的偏移效果
        label.shadowOffset = CGSizeMake(-1, -1)
        
        //6.設置文字的對齊模式(默認是左對齊)
        //Center -> 居中
        //Right -> 右對齊
        //Left -> 左對齊
        label.textAlignment = .Left
        
        
        label.text = "default is NSLineBreakBy TruncatingTail used for single and multiple lines of text 這樣就用代碼實現了label的創建,其中initWithFrame設置了label的位置還有大小,奧斯卡的積分換空間和"
        
        //7.設置行數
        label.numberOfLines = 5
        //自動換行
        label.numberOfLines = 0
        
        //8.設置換行模式
        //ByWordWrapping -> 以單詞為單位換行
        //ByCharWrapping -> 以字符為單位換行
        //...
        label.lineBreakMode = .ByCharWrapping
        
    }

}

根據文字設置label的大小

代碼示例:

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    
        //需要顯示在label上的文字
        let str = "收到回復asdfsajfdkl刷卡費上"
        
        //計算顯示指定文字所需要的最小空間
        //1.將swift的字符串轉換成OC的字符串
        let ocStr = str as NSString
        //2.計算字符串的大小
        //參數1:限制顯示當前字符串的最大寬度和最大高度
        //參數2:設置渲染方式(UsesLineFragmentOrigin)
        //參數3:確定文字的字體(大小)
        //NSFontAttributeName ->字體對應的key值
        //NSForegroundColorAttributeName -> 文字顏色對應的key值
         let strSize = ocStr.boundingRectWithSize(CGSizeMake(100, 1000000000), options: .UsesLineFragmentOrigin, attributes: [NSFontAttributeName:UIFont.systemFontOfSize(17)], context: nil).size
        print(strSize)
        
        
        //3.創建label顯示文字
        let label = UILabel.init(frame: CGRectMake(100, 100, strSize.width, strSize.height))
        label.backgroundColor = UIColor.yellowColor()
        self.view.addSubview(label)
        label.text = str
        //自動換行
        label.numberOfLines = 0
        
    }

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,763評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,238評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,823評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,604評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,339評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,713評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,712評論 3 445
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,893評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,448評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,201評論 3 357
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,397評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,944評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,631評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,033評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,321評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,128評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,347評論 2 377

推薦閱讀更多精彩內容

  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,162評論 4 61
  • 今天與董事長和老總在一起聊了公司得現狀和必須面對得問題,也給了我一些彈性處理問題的方式方法,確實對我本身有很大的啟...
    oilyne閱讀 814評論 0 2
  • 沖著淘點點上8.8的評分和“黑馬”兩字,果斷買票去看。 個人覺得電影評分低不代表電影本身不好,當然高自然是有它的好...
    蕭靖男閱讀 1,453評論 7 13
  • 表格標簽:table 表格thead 表格頭tbody 表格主體tr 表格行th 元素定義表頭td 元素定義表格單...
    奶瓶SAMA閱讀 156評論 0 0