1

简介

AutoLayout自动布局功能随着iOS6的发布横空出世,现在已经成为了iOS机型适配最佳的解决方案之一。由于自动布局的特点,对于使用自动布局功能的视图,我们不能再像之前一样去操作它的frame、center等属性,我们通过对布局约束的操作来代替之前的方法来实现动画。
自然的,你可能会问:我们如何去操作一个约束呢?
其实操作约束和操作属性的区别并不大
图片描述

Animating Interface Builder constraints

图片描述
这是我们Demo的模版,上方的View高度是固定的
首先我们通过连线操作将高度的约束拿到,创建一个outlet

@IBOutlet weak var menuHeightConstraint: NSLayoutConstraint!

接下来修改菜单按钮的响应方法

  @IBAction func actionToggleMenu(sender: AnyObject) {
    //修改开关状态
    isMenuOpen = !isMenuOpen
    //调整高度约束的值
    menuHeightConstraint.constant = isMenuOpen ? 200.0 : 60.0
    //修改Title
    titleLabel.text = isMenuOpen ? "Select Item" : "Packing List"
  }

这样我们就已经实现了界面的调整,怎么让它动起来呢
这里我们又要用到我们的老朋友animateWithDuration(_:animations:)和其它几个相近API了

Animating layout changes

让我们的变化动起来!

UIView.animateWithDuration(1.0, delay: 0.0, usingSpringWithDamping: 0.4, initialSpringVelocity: 10.0, options: .CurveEaseIn, animations: {
self.view.layoutIfNeeded()
}, completion: nil)

将上面这段代码加在后面,就可以实现动画效果了
在修改了约束后,iOS并没有机会去重新布局界面,通过在动画闭包中调用layoutIfNeeded方法,实现了对这个界面的布局

Rotating view animations

这次我们添加一个简单的旋转动画放在动画闭包中

let angle = self.isMenuOpen ? CGFloat(M_PI_4) : 0.0
self.buttonMenu.transform = CGAffineTransformMakeRotation(angle)

最终效果

图片描述


Hydrogen
2.5k 声望73 粉丝

Write code for fun.