Swift - 自动布局库SnapKit的使用详解3(约束优先级,约束做动画)
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()
}
}
}
Swift - 自动布局库SnapKit的使用详解3(约束优先级,约束做动画)的更多相关文章
- Swift - 自动布局库SnapKit的使用详解4(样例1:实现一个登录页面)
前面的几篇文章讲解了自动布局库SnapKit的使用方法.本文通过一个完整的样例(登录页面)来演示在实际项目中如何使用SnapKit来实现自动化布局的.1,效果图如下
- Swift - 自动布局库SnapKit的使用详解1(配置、使用方法、样例)
为了适应各种屏幕尺寸,iOS 6后引入了自动布局(Auto Layout)的概念,通过使用各种 Constraint(约束)来实现页面自适应弹性布局. 在 StoryBoard 中使用约束实现自动布局 ...
- Swift - 自动布局库SnapKit的使用详解2(约束的更新、移除、重做)
在之前的文章中我介绍了如何使用SnapKit的 snp_makeConstraints 方法进行各种约束的设置.但有时我们的页面并不是一直固定不变的,这就需要修改已经存在的约束.本文介绍如何更新.移除 ...
- 技巧:Linux 动态库与静态库制作及使用详解
技巧:Linux 动态库与静态库制作及使用详解 标准库的三种连接方式及静态库制作与使用方法 Linux 应用开发通常要考虑三个问题,即:1)在 Linux 应用程序开发过程中遇到过标准库链接在不同 L ...
- (转)python标准库中socket模块详解
python标准库中socket模块详解 socket模块简介 原文:http://www.lybbn.cn/data/datas.php?yw=71 网络上的两个程序通过一个双向的通信连接实现数据的 ...
- Python中第三方库Requests库的高级用法详解
Python中第三方库Requests库的高级用法详解 虽然Python的标准库中urllib2模块已经包含了平常我们使用的大多数功能,但是它的API使用起来让人实在感觉不好.它已经不适合现在的时代, ...
- iOS开发——网络编程Swift篇&(八)SwiftyJSON详解
SwiftyJSON详解 最近看了一些网络请求的例子,发现Swift在解析JSON数据时特别别扭,总是要写一大堆的downcast(as?)和可选(Optional),看?号都看花了.随后发现了这个库 ...
- python requests库与json数据处理详解
1. http://docs.python-requests.org/zh_CN/latest/user/quickstart.html get方法将参数放在url里面,安全性不高,但是效率高:pos ...
- iOS开发——网络编程Swift篇&(七)NSURLSession详解
NSURLSession详解 // MARK: - /* 使用NSURLSessionDataTask加载数据 */ func sessionLoadData() { //创建NSURL对象 var ...
随机推荐
- 半平面交模板(O(n*n)&& O(n*log(n))
摘自http://blog.csdn.net/accry/article/details/6070621 首先解决问题:什么是半平面? 顾名思义,半平面就是指平面的一半,我们知道,一条直线可以将平面分 ...
- Mono for Android布局控件属性小结
1. layout_weight 用于给一个线性布局中的诸多视图的重要度赋值. 所有的视图都有一个layout_weight值,默认为零,意思是需要显示 多大的视图就占据多大的屏幕空 间.若赋一个高于 ...
- mysql 查询开销 sending data
1.执行一个查询,发现时间开销都在sending data,为什么?2.sending data容易误导,让人以为只是发送数据给客户端,实际上sending data包含两个过程:读取数据并处理,发送 ...
- css处理浏览器兼容问题
浏览器的兼容: _ ie6认识 格式:_width:100px;要写在最后面来覆盖前面的. * ie6和ie7都认识 格式:* width:100px;要写在最后面来覆盖前面的. \0 ie8认识 ...
- php三维数组变二维数组
<?php $result = Array(0 => Array(0 => Array(bid => 41,brealname => 'we教官',cid => 4 ...
- Android Volley和Gson实现网络数据加载
Android Volley和Gson实现网络数据加载 先看接口 1 升级接口 http://s.meibeike.com/mcloud/ota/cloudService POST请求 参数列表如下 ...
- hiho_1139_二分+bfs搜索
题目 给定N个点和M条边,从点1出发,到达点T.寻找路径上边的个数小于等于K的路径,求出所有满足条件的路径中最长边长度的最小值. 题目链接:二分 最小化最大值,考虑采用二分搜索.对所有的边长进 ...
- python语法笔记(五)
1.python内存管理 (1)对象内存使用 &nsbp;&nsbp;&nsbp;&nsbp;在python中通过执行内建函数 id(obj) 可以获得对象obj在内存 ...
- Hbase之必要时取出请求的行(列族所有数据)
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.CellScanner; import org. ...
- form作为module name 悲剧了
爆出很无语的错误,也怪我,没有实地的debug. 所以,module name应该是不能碰关键词类似,最好custom一点好.