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(5) {

            self.boxView.snp_updateConstraints(closure: { (make) -> Void in
                make.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 in
            self.topConstraint = make.top.equalTo(self.view).offset(400).constraint
            make.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()立即刷新

 

 

时间: 2024-10-10 23:18:04

swift 之SnapKit 动画的相关文章

Xcode8中添加Swift自动布局SnapKit框架报错,编译失败

---恢复内容开始--- 既然SnapKit的作者说SnapKit已经支持Swift3.0了,那么我们就先来适配SnapKit,首先用Xcode8新建一个空项目,利用Cocoapods导入SnapKit. Podfile 打开工程,依然弹出这个选项: 是否转换到Swift3.0 刚才选择了Convert依然报错,可见不靠谱,这次我们全部选择Later. 编译后,报错: 报错 错误提示我们依然是"Use Legacy Swift Language Version"这个选项的问题.我们来看

swift - 歌曲列表动画

// //  ViewController.swift //  songAnimation // //  Created by su on 15/12/10. //  Copyright © 2015年 tian. All rights reserved. // import UIKit class ViewController: UIViewController { override func viewDidLoad() {        super.viewDidLoad()       

Swift 表视图动画教程: Drop-In Cards

http://www.raywenderlich.com/76024/swift-table-view-animations-tutorial-drop-cards 标准 table view 是一个强大而又灵活的数据呈现方式:大部分情况下你的app 都使用了某种形式的 table view.但是,它有一个缺点就是,无法进行太多的定制,你的 app 会淹没在成千上万的类似是 app 中. 为了不使用千篇一律的 table view,我们可以利用某些动画以便使你的app 更加耀眼.看一下 Goog

Swift - transform.m34动画示例

效果 源码 https://github.com/YouXianMing/Swift-Animations // // CATransform3DM34Controller.swift // Swift-Animations // // Created by YouXianMing on 16/8/19. // Copyright © 2016年 YouXianMing. All rights reserved. // import UIKit class CATransform3DM34Con

iOS UIView动画详解(Objective-C)

我在之前的一篇博客中<iOS UIView动画详解(Swift)>讲解了使用Swift来实现UIView类下面提供的多种动画效果,如位置动画.旋转动画.缩放动画.颜色动画.透明度动画等等.为了这个题目的完整性,今天我使用Objective-C来完全重写以上的所有的动画.项目案例已经上传至:https://github.com/chenyufeng1991/iOS-UIView-Animation  中的Animation-OC文件夹下,另一个目录下则是Swift实现的动画. (1)位置动画 P

snapkit 编译不过,求助

之前用过masonary,现在想用下swift版本 snapkit git链接:https://github.com/SnapKit/SnapKit.git . 下载后运行不了,有一些错误. 我的xcode版本是7.2,应该是够的. 我所做的事情: 1.下载了工程,编译不过 2.参考了 http://www.hangge.com/blog/cache/detail_1097.html.这个思路是将snapkit整个工程导入,然后添加snapkit的编译框架. 3.还有这个 http://www.

iOS代码规范(Swift 与 OC 混编版)

前言 按照自己的理解整理的 iOS 代码规范,部分规范参考了网上现有的一些资料,希望对大家有所帮助 编码规范 项目结构规范 项目结构图 |-业务1 | |-业务1的Storyboard | |-子业务1 | | |-controller | | |-view | | `-model | |-子业务2 | | |-controller | | |-views | | `-models |-业务2 | |-业务2的Storyboard | |-子业务1 | | |-controller | | |-

iOS 网络资源汇总之动画

Core Animation笔记,基本的使用方法 - Core Animation笔记,基本的使用方法:1.基本动画, 2.多步动画,3.沿路径的动画,4.时间函数,5.动画组. awesome-ios-animation - iOS Animation 主流炫酷动画框架(特效)收集整理 收集整理了下iOS平台下比较主流炫酷的几款动画框架. 侧滑与右滑返回手势 SloppySwiper - iOS系统自带的UINavigationController要7.0才支持,但不过该手势只能从屏幕左侧边缘

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

iOS精选源码 全网最详细购物车强势来袭 一款优雅易用的微型菜单弹窗(类似QQ和微信右上角弹窗) swift, UITableView的动态拖动重排CCPCellDragger 高仿书旗小说 Flutter版,支持iOS.Android NKAVPlayer 轻量级视频播放.控制,iOS AVPlayer RN 仿微信朋友圈 SwiftScan 二维码/条形码扫描.生成,仿微信.支付宝 Mac上解压Assets.car文件的小工具cartool tispr-card-stack - swift