swift 之SnapKit 动画
这个问题纠结了我挺长时间的。一直以为把约束直接添加到动画里面就可以了。但是并没那么简单。-.-其实还是挺简
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() {
self.boxView.snp_updateConstraints(closure: { (make) -> Void in
make.top.equalTo(self.view).offset()
})
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 in
self.topConstraint = make.top.equalTo(self.view).offset().constraint
make.left.equalTo(self.view).offset()
make.size.equalTo(CGSize(width: , height: ))
}
}
}
对于这个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()立即刷新
swift 之SnapKit 动画的更多相关文章
- Swift - transform.m34动画示例
Swift - transform.m34动画示例 效果 源码 https://github.com/YouXianMing/Swift-Animations // // CATransform3DM ...
- Swift 表视图动画教程: Drop-In Cards
http://www.raywenderlich.com/76024/swift-table-view-animations-tutorial-drop-cards 标准 table view 是一个 ...
- swift 约束 - SnapKit 适配iPhoneX 安全区 和苹果自带的VFL ,auto layout 安全区适配
这里tableview 是从最顶上的安全区适配的, nextBtn是最下边从安全区设置的,如果是在中间的view还是原来的写法,看2 1.安全区适配适用于Vc里面, 如果是自定义的view或封装的vi ...
- swift - 歌曲列表动画
// // ViewController.swift // songAnimation // // Created by su on 15/12/10. // Copyright © 2015 ...
- iOS开发——动画篇Swift篇&常用动画总结
UIView动画: UIView动画时最基本的动画,是直接对我们界面上控件进行简单的动画效果实现,如果你只需要用到一些简单的效果,那么这个很适合你,关于UIView动画实现恨简单, UIKit直接将动 ...
- swift 头尾式动画
1.0 头尾式动画 UIView.beginAnimations(nil, context: nil) UIView.setAnimationDuration(1.0) // 设置执行动画所需要的时间 ...
- swift 设置图片动画组 iOS11之前 默认图片 设置不成功
在iOS 11 上, 1.先执行动画组 在设置图片执行帧动画,2.先设置图片在设置帧动画,执行帧动画 没有任何问题 在iOS 10和iOS9上,必须 执行 方法二(先设置图片在设置帧动画,执行帧动画 ...
- swift之水纹动画
import UIKit class CVLayerView: UIView { var pulseLayer : CAShapeLayer! //定义图层 override init(frame: ...
- 你会用swift创建复杂的加载动画吗(1)
时至今日,iOS 应用商店已经拥有超过了140万 应用,让你自己的应用脱颖而出确实是个不小的挑战.不过,在你的应用掉入默默无闻的大黑洞之前,你拥有一个小小的机遇窗,它能帮你吸引用户的注意. AD: 时 ...
随机推荐
- Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库
装饰器其实也是一个函数,它的参数是一个函数 ; 其它函数与装饰器之间建立联系是通过 @装饰器函数名, 感觉有点像Spring的面向切面编程 装饰器函数,如何处理原函数的参数.? 装饰器 原函数返回值 ...
- 升级与修改Nginx
自从上次安装了Nginx后,学到了很多新的东西,比如http2.0... 而且还发现nginx还出了新版本,遂决定升级下,还是那个URL,下载最新版. ./configure --user=www - ...
- Go语言基础知识
Go语言的一般结构:basic_structure.go Go程序是通过package来组织的,只能同过package名称为main的包可以包含main函数(一个可执行程序只能有一个main包) 通过 ...
- Android 之异步任务(AsyncTask,Handler,Message,looper)
AsyncTask: 3个类型(Params,Progress和Result),4个步骤(onPreExecute(),doInBackground(Params…),onProgressUpdate ...
- JavaScript中的位置屬性
屏幕中的位置(直接使用,無需前綴): screenLeft.screenTop:除了火狐都支持 screenX.screenY: 窗口的大小(谷歌的inner=outer,直接使用,無需前綴): in ...
- 利用ASP.NET操作IIS (可以制作安装程序)
很多web安装程序都会在IIS里添加应用程序或者应用程序池,早期用ASP.NET操作IIS非常困难,不过,从7.0开始,微软提供了 Microsoft.Web.Administration 类,可以很 ...
- IIC-BUS INTERFACE
I2C总线是由Philips公司开发的一种简单.双向二线制同步串行总线.它只需要两根线即可在连接于总线上的器件之间传送信息. To control multi-master IIC-bus opera ...
- MVC(3DOnLine)开发过程的一些难点以及知识点
1.当修改数据然后保存时,会提示有一行受影响无法保存 @Html.HiddenFor(model => model.UserID) 最好将主键隐藏 也就是不去修改它 原因:修改了主键 然 ...
- vue传数据到模态框中
写一下我的做法 <a data-toggle="modal" data-target="#delete_tpl_modal" class="bt ...
- 在ASP.NET Core中如何支持每个租户数据存储策略的数据库
在ASP.NET Core中如何支持每个租户数据存储策略的数据库 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: ht ...