你好,歡迎來到IOS教程網

 Ios教程網 >> IOS使用技巧 >> IOS7技巧 >> Swift自動布局庫SnapKit的約束優先級,約束做動畫使用詳解

Swift自動布局庫SnapKit的約束優先級,約束做動畫使用詳解

編輯:IOS7技巧
本文章來為各位介紹一篇關於Swift自動布局庫SnapKit的約束優先級,約束做動畫使用例子,這個例子也是接著前面的教程來介紹的,希望對各位有用。

1,約束優先級

我們使用SnapKit的時候,還可以定義約束的優先級。這樣當約束出現沖突的時候,優先級高的約束覆蓋優先級低的約束。具體優先級可以放在約束鏈的結束處。

(1)可以設置如下幾種優先級

priorityLow():設置低優先級,優先級為250
priorityMedium():設置中優先級,優先級為500(這個也就是默認的優先級)
priorityHigh():設置高優先級,優先級為750
priority():可以設置任意的優先級,接受的參數是0-1000的數字。比如:priority(600)

(2)使用優先級的樣例

下面我們在屏幕中央放置一個100*100的橙色方塊,給其定義了長寬尺寸小於等於屏幕的大小的默認優先級約束。同時,每次點擊屏幕的時候,會更新放大它的尺寸。但由於這個約束的優先級是低,所有方塊頂到屏幕邊緣後就會不再放大。


import UIKit
import SnapKit
 
class ViewController: UIViewController {
    
    lazy var box = UIView()
    
    var scacle = 1.0
   
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //單擊監聽
        let tapSingle=UITapGestureRecognizer(target:self,action:#selector(tapSingleDid))
        tapSingle.numberOfTapsRequired=1
        tapSingle.numberOfTouchesRequired=1
        self.view.addGestureRecognizer(tapSingle)
        
        box.backgroundColor = UIColor.orangeColor()
        self.view.addSubview(box)
        
        box.snp_makeConstraints { (make) -> Void in
            //視圖居中
            make.center.equalTo(self.view)
            //初始寬、高為100(優先級低)
            make.width.height.equalTo(100 * self.scacle).priorityLow();
            //最大尺寸不能超過屏幕
            make.width.height.lessThanOrEqualTo(self.view.snp_width)
            make.width.height.lessThanOrEqualTo(self.view.snp_height)
        }
    }
    
    //點擊屏幕
    func tapSingleDid(){
        self.scacle += 0.5
        self.box.snp_updateConstraints{ (make) -> Void in
            //放大視圖(優先級最低)
            make.width.height.equalTo(100 * self.scacle).priorityLow();
        }
    }
}

2,帶有動畫效果

配合 UIView.animateWithDuration,我們可以在約束改變的時候有動畫效果。
還是以上面的樣例演示,不夠這次點擊屏幕時橙色視圖放大的時候會有過渡,而不是一下就變大。


import UIKit
import SnapKit
 
class ViewController: UIViewController {
    
    lazy var box = UIView()
    
    var scacle = 1.0
   
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //單擊監聽
        let tapSingle=UITapGestureRecognizer(target:self,action:#selector(tapSingleDid))
        tapSingle.numberOfTapsRequired=1
        tapSingle.numberOfTouchesRequired=1
        self.view.addGestureRecognizer(tapSingle)
        
        box.backgroundColor = UIColor.orangeColor()
        self.view.addSubview(box)
        
        box.snp_makeConstraints { (make) -> Void in
            //視圖居中
            make.center.equalTo(self.view)
            //初始寬、高為100(優先級低)
            make.width.height.equalTo(100 * self.scacle).priorityLow();
            //最大尺寸不能超過屏幕
            make.width.height.lessThanOrEqualTo(self.view.snp_width)
            make.width.height.lessThanOrEqualTo(self.view.snp_height)
        }
    }
    
    //視圖約束更新
    override func updateViewConstraints() {
        self.box.snp_updateConstraints{ (make) -> Void in
            //放大尺寸(優先級低)
            make.width.height.equalTo(100 * self.scacle).priorityLow();
        }
        
        super.updateViewConstraints()
    }
    
    //點擊屏幕
    func tapSingleDid(){
        self.scacle += 0.5
        //告訴self.view約束需要更新
        self.view.setNeedsUpdateConstraints()
        //動畫
        UIView.animateWithDuration(0.3) {
            self.view.layoutIfNeeded()
        }
    }
}

原文出自:www.hangge.com 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved