这个问题纠结了我挺长时间的。一直以为把约束直接添加到动画里面就可以了。但是并没那么简单。-.-其实还是挺简

class ViewController: UIViewController {@IBOutlet weak var usernameOutlet: UITextField!@IBOutlet weak var animateBtn: UIButton!let boxView = UIView()var topConstraint: Constraint? = nil@IBAction func animateBtnClick(sender: UIButton) {UIView.animateWithDuration(5) {self.boxView.snp_updateConstraints(closure: { (make) -> Void inmake.top.equalTo(self.view).offset(30)})self.view.layoutIfNeeded()
//            self.view.setNeedsDisplay()
//            self.view.setNeedsLayout()
//            self.view.layoutSubviews()
            }}override func viewDidLoad() {super.viewDidLoad()let tapGesture = UITapGestureRecognizer(target: self, action: "tapBg:")view.addGestureRecognizer(tapGesture)boxView.backgroundColor = UIColor.purpleColor()self.view.addSubview(boxView)boxView.snp_makeConstraints { (make) -> Void inself.topConstraint = make.top.equalTo(self.view).offset(400).constraintmake.left.equalTo(self.view).offset(50)make.size.equalTo(CGSize(width: 80, height: 80))}}}

对于这个layoutIfNeeded, 还有一个地方我们经常会碰到,就是设置约束我们如何才能立马得到frame的数值:

view.superview. layoutIfneed()

今天要谈的重点来了, iOS layout 相关机制

- (CGSize)sizeThatFits:(CGSize)size
- (void)sizeToFit- (void)layoutSubviews
- (void)lauoutIfNeeded
- (void)setNeedsLayout- (void)setNeedsDisplay
- (void)drawRect

1. layoutSubviews:

  • init 不会触发
  • addsubview 会触发
  • 设置view的frame(有变化的)
  • 滚动一个UIScroollView会
  • 旋转Screen,触发父UIView上的layoutSubViews事件
  • 直接调用setLayoutSubviews
  • 直接调用setNeedsLayout

You should override this method only if the autoresizing behaviors of the subviews do not offer the behavior you want. // layoutSubviews, 当我们在某个类的内部调整子视图位置时,需要调用。

刷新子对象布局:

- layoutSubviews: 不做任何事情,需要重写

- setNeedsLayout:  标记为需要重新布局,异步调用layoutIfNeeded刷新布局,不立即刷新,但是layoutSubviews一定会被调用

- layoutIfNeeded: 如果有需要刷新新的标记,立即调用layoutSubviews进行布局

如果需要立即刷新,需要先view.setNeedsLayout()(设置标记),然后调用view.layoutIfneeded()立即刷新

 

 

转载于:https://www.cnblogs.com/Ohero/p/5120741.html

swift 之SnapKit 动画相关推荐

  1. iOS核心动画详解swift版----基础动画

    2019独角兽企业重金招聘Python工程师标准>>> iOS核心动画详解swift版---基础动画 创建工程,添加2个ViewController,通过rootViewContro ...

  2. swift转场动画_Swift游乐场的演变

    swift转场动画 "An amazing platform to learn coding, a great developer tool" is a good definiti ...

  3. spritekit 动画_使用SpriteKit在Swift中创建动画

    动画是通过动作解释我们的应用程序功能以及让用户满意的好方法.在正确的位置添加动画可以真正使UI看起来更加精致和美观. 但是创建出色的动画需要进行大量的调整和迭代,因为我们经常需要尝试不同的动画步骤,持 ...

  4. Swift UIImageView简单动画

    UIImageView 如果要实现类似于grf的动画图 我们可以直接使用两中方式实现 方法一,设置动态图片 首先,我们需要一组实现动画的图片,按照顺序命名 如图所示 test 我们可以创建UIImag ...

  5. Swift UILabel 数字动画效果

    昨天去面试 面试官问我 如何实现 label数字由低到高增长.特地整理了一下 用的时候 只要调用这个类 即可实现 在多少s内 有 min - max 的方法 ///自己写的一个类 class UIZJ ...

  6. OC swift 一些常用第三方收集整理 (第三方集合)

    整理了Xcode好用的插件,包括OC和Swift,信息更详细和完整 下拉刷新 EGOTableViewPullRefresh– 最早的下拉刷新控件. SVPullToRefresh– 下拉刷新控件. ...

  7. 全面的Swift学习资料整理

    资料1 ---教程类 官方文档中文翻译http://wiki.jikexueyuan.com/project/swift/Github上的地址点我 Using Swift with Cocoa and ...

  8. 关于swift5以上的SnapKit框架的入门教程使用

    关于swift的SnapKit框架的入门教程使用 苹果在swift框架下面,一般使用snapKit进行纯代码的自动布局.常见的布局方式一种是纯代码,还有VFL,此语法较难,或者相对来说比较麻烦.还有s ...

  9. iOS播放器、Flutter高仿书旗小说、卡片动画、二维码扫码、菜单弹窗效果等源码

    iOS精选源码 全网最详细购物车强势来袭 一款优雅易用的微型菜单弹窗(类似QQ和微信右上角弹窗) swift, UITableView的动态拖动重排CCPCellDragger 高仿书旗小说 Flut ...

最新文章

  1. join,和循环删除,fromkeys,集合,拷贝
  2. php面向对象链接mysql_php连接数据库的两种方式- 面向过程 面向对象
  3. 云炬Android开发笔记 2-2 Android studio项目上传到Github及无法连接Github的问题处理
  4. canal解析mysql日志异常_利用Canal解析mysql binlog日志
  5. JVM优化系列-JVM内存溢出的原因
  6. 智能云仓库存管理 v1.2.0
  7. oracle自学视频
  8. 远程连接时本机的键盘变成了快捷键,键盘无法打字,但是远程桌面可以进行输入
  9. Ubuntu用apt-get下载csh
  10. android用户和AID
  11. 学界 | Ian Goodfellow最新论文:是猫还是狗?不光神经网络识别不了,你也能被忽悠...
  12. 255%可用已接通电源_直流稳压电源五款电路图详解
  13. 程序员如何才能写出一篇好的技术文章
  14. 暧昧散场,穿过你的黑发我的手968
  15. 柳如是,当得奇女子。
  16. Win11系统电脑浏览器打开页面时显示无法访问此页面
  17. ArcGIS Pro(ArcMap)中利用自带地理处理工具实现线图层批量裁剪面图层
  18. 企业如何通过企业微信玩转社群营销?
  19. java学到什么程度可找工作_Java学到什么程度可以找工作
  20. java实现微博后台登录后台发送微博

热门文章

  1. java保存不了_在使用Java写入文件时,文件不能保存在文件夹中
  2. mysql proxy性能差_两种MySQL-Proxy架构的测试对比记录
  3. ajax 时间格式string,ajax 数据请求:json格式在浏览器变成了string ,使用JSON.stringify(params)方法...
  4. .Net高级技术笔记
  5. 今日SGU 5.25
  6. 互联网秒杀设计--转载
  7. 面向程序员的网络基本知识 - 网络模型及网络设备
  8. cocospod 安装和使用
  9. shell脚本替换文件中字符
  10. c嵌入python类获取返回值