自動布局蚌讼、SnapKit辟灰、Layout之約束動畫

布局Layout之約束動畫

import UIKit

class ViewController: UIViewController {
    
    
    //屬性:
    @IBOutlet weak var topConstraint: NSLayoutConstraint!
    
    @IBOutlet weak var widthConstraint: NSLayoutConstraint!
    

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        
        
        UIView.animateWithDuration(1) {
            
            //改變約束的值的大小
            self.topConstraint.constant = 280
            self.widthConstraint.constant = 250
            
            //如果想要通過改變約束值去動畫的改變視圖的位置和大小必須添加下面的代碼才能有效
            self.view.layoutIfNeeded()
            
        }
        
    }


}

原生方式添加約束

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        //手寫約束的步驟:
        //1.創(chuàng)建視圖對象(不需要設(shè)置frame)
        let redView = UIView()
        redView.backgroundColor = UIColor.redColor()
        //2.將視圖添加到界面
        self.view.addSubview(redView)
        //3.關(guān)閉Autoresizing
        redView.translatesAutoresizingMaskIntoConstraints = false
        
        //4.創(chuàng)建約束對象
        //NSLayoutConstraint:約束類
        //參數(shù)1的參數(shù)2 參數(shù)3 (參數(shù)4的參數(shù)5)*參數(shù)6+參數(shù)7
        //a.top
        //redView.Top = (self.view.Top)*1+50
        let top = NSLayoutConstraint.init(item: redView, attribute: .Top, relatedBy: .Equal, toItem: self.view, attribute: .Top, multiplier: 1, constant: 50)
        
        //b.left
        let left = NSLayoutConstraint.init(item: redView, attribute: .Left, relatedBy: .Equal, toItem: self.view, attribute: .Left, multiplier: 1, constant: 50)
        
        //c.right 
        let right = NSLayoutConstraint.init(item: redView, attribute: .Right, relatedBy: .Equal, toItem: self.view, attribute: .Right, multiplier: 1, constant:-50)
        
        //d.bottom
        let bottom = NSLayoutConstraint.init(item: redView, attribute: .Bottom, relatedBy: .Equal, toItem: self.view, attribute: .Bottom, multiplier: 1, constant:-200)
        
        //5.添加約束(注意添加約束的對象)
        self.view.addConstraints([top,left,right,bottom])
        
        //再添加一個綠色視圖
        //1.創(chuàng)建視圖對象
        let greenView = UIView()
        greenView.backgroundColor = UIColor.greenColor()
        //2.添加到界面上
        self.view.addSubview(greenView)
        //3.關(guān)閉Autoresizing
        greenView.translatesAutoresizingMaskIntoConstraints = false
        
        //4.創(chuàng)建約束
        //a.left
        let left2 = NSLayoutConstraint.init(item: greenView, attribute: .Left, relatedBy: .Equal, toItem: redView, attribute: .Left, multiplier: 1, constant: 0)
        //b.top
        let top2 = NSLayoutConstraint.init(item: greenView, attribute: .Top, relatedBy: .Equal, toItem: redView, attribute: .Bottom, multiplier: 1, constant: 30)
        //c.width
        let width2 = NSLayoutConstraint.init(item: greenView, attribute: .Width, relatedBy: .Equal, toItem: redView, attribute: .Width, multiplier: 0.5, constant: 0)
        //d.height
        let height2 = NSLayoutConstraint.init(item: greenView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .Height, multiplier: 0, constant: 60)
        
        //5.添加約束
        self.view.addConstraints([left2,top2,width2])
        greenView.addConstraint(height2)
        
        //注意:通過添加的約束必須能夠確定視圖的坐標(biāo)和大小

        
        
        
    }

自動布局SnapKit

//將第三方庫文件包含進來
import SnapKit
//SnapKit的作用:簡便的通過代碼添加約束,用法和Masonry一樣


class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        //1.創(chuàng)建視圖對象
        let redView = UIView.init()
        redView.backgroundColor = UIColor.redColor()
        //2.添加到界面上
        self.view.addSubview(redView)
        
        //3.添加約束
        //參數(shù):make,指的就是當(dāng)前的視圖(redView)
        redView.snp_makeConstraints { (make) in
            
            //a.left
            //redView的left 等于 self.view的left偏移20
            make.left.equalTo(self.view.snp_left).offset(20)
            //b.top
            make.top.equalTo(self.view.snp_top).offset(20)
            //c.right
            make.right.equalTo(self.view.snp_right).offset(-20)
            //d.bottom
            make.bottom.equalTo(self.view.snp_bottom).offset(-250)
        }
        
        //再創(chuàng)建一個綠色視圖
        //1.創(chuàng)建視圖對象
        let greenView = UIView()
        greenView.backgroundColor = UIColor.greenColor()
        //2.添加到界面上
        self.view.addSubview(greenView)
        
        //3.添加約束
        greenView.snp_makeConstraints { (make) in
            //1.left
            //greenView的left等于redView的left(注:如果后邊的屬性和前面的屬性是一樣的,后邊屬性名可以省略)
            make.left.equalTo(redView)
            //2.top
            make.top.equalTo(redView.snp_bottom).offset(20)
            //3.width
            make.width.equalTo(redView).multipliedBy(0.5)
            //4.height
            make.height.equalTo(60)
        }

SnapKit的應(yīng)用

import UIKit
import SnapKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        //1.創(chuàng)建視圖
        let redView = UIView()
        let greenView  = UIView()
        let blueView = UIView()
        
        //2.設(shè)置背景顏色
        redView.backgroundColor = UIColor.redColor()
        greenView.backgroundColor = UIColor.greenColor()
        blueView.backgroundColor = UIColor.blueColor()
        
        //3.添加到界面上
        self.view.addSubview(redView)
        self.view.addSubview(greenView)
        self.view.addSubview(blueView)
        
        let margin: CGFloat = 20
        
        //4.添加約束
        //a.綠色視圖
        greenView.snp_makeConstraints { (make) in
            make.left.equalTo(self.view).offset(margin)
            make.top.equalTo(self.view).offset(margin)
            make.right.equalTo(redView.snp_left).offset(-margin)
            make.bottom.equalTo(blueView.snp_top).offset(-margin)
            make.height.equalTo(redView)
            make.height.equalTo(blueView)
            make.width.equalTo(redView)
        }
        
        //b.紅色視圖
        redView.snp_makeConstraints { (make) in
            make.left.equalTo(greenView.snp_right).offset(margin)
            make.top.equalTo(self.view).offset(margin)
            make.right.equalTo(self.view).offset(-margin)
            make.bottom.equalTo(blueView.snp_top).offset(-margin)
            make.height.equalTo(greenView)
            make.height.equalTo(blueView)
            make.width.equalTo(greenView)
        }
        
        
        //c.藍(lán)色視圖
        blueView.snp_makeConstraints { (make) in
            make.left.equalTo(greenView)
            make.right.equalTo(redView)
            make.top.equalTo(greenView.snp_bottom).offset(margin)
            make.bottom.equalTo(self.view).offset(-margin)
            make.height.equalTo(greenView)
        }
        
        
        
        
        
    }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末篡石,一起剝皮案震驚了整個濱河市芥喇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌夏志,老刑警劉巖乃坤,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異沟蔑,居然都是意外死亡湿诊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門瘦材,熙熙樓的掌柜王于貴愁眉苦臉地迎上來厅须,“玉大人,你說我怎么就攤上這事食棕±屎停” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵簿晓,是天一觀的道長眶拉。 經(jīng)常有香客問我,道長憔儿,這世上最難降的妖魔是什么忆植? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮谒臼,結(jié)果婚禮上朝刊,老公的妹妹穿的比我還像新娘。我一直安慰自己蜈缤,他們只是感情好拾氓,可當(dāng)我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著底哥,像睡著了一般咙鞍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上叠艳,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天奶陈,我揣著相機與錄音,去河邊找鬼附较。 笑死,一個胖子當(dāng)著我的面吹牛潦俺,可吹牛的內(nèi)容都是我干的拒课。 我是一名探鬼主播徐勃,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼早像!你這毒婦竟也來了僻肖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤卢鹦,失蹤者是張志新(化名)和其女友劉穎臀脏,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冀自,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡揉稚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了熬粗。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搀玖。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖驻呐,靈堂內(nèi)的尸體忽然破棺而出灌诅,到底是詐尸還是另有隱情,我是刑警寧澤含末,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布猜拾,位于F島的核電站,受9級特大地震影響佣盒,放射性物質(zhì)發(fā)生泄漏挎袜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一沼撕、第九天 我趴在偏房一處隱蔽的房頂上張望宋雏。 院中可真熱鬧,春花似錦务豺、人聲如沸磨总。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蚪燕。三九已至,卻和暖如春奔浅,著一層夾襖步出監(jiān)牢的瞬間馆纳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工汹桦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鲁驶,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓舞骆,卻偏偏與公主長得像钥弯,于是被迫代替她去往敵國和親径荔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,060評論 2 355

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

  • 目錄 0脆霎、前言 一总处、Auto Layout前世今生 二、Auto Layout基礎(chǔ)知識 1.Auto Layout...
    浮游lb閱讀 24,544評論 3 89
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,180評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫睛蛛、插件鹦马、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,107評論 4 62
  • 世上最可悲的事,就是別人坑你忆肾,還傻傻的感謝人家荸频。這得有多賤啊难菌!真想給自己一巴掌试溯,知道疼了才長教訓(xùn)。 為什么被忽悠啊...
    白玉山閱讀 198評論 0 0
  • LAMP是:Linux(操作系統(tǒng))郊酒、Apache(HTTP 服務(wù)器)遇绞,MySQL(有時也指MariaDB,數(shù)據(jù)庫軟...
    devindwan閱讀 905評論 0 0