动画之约束动画

动画之约束动画

基于约束的动画。就是修改NSLayoutConstraint的动画。

  • 约束的查找
  • 实现动画
  • 约束生效的方式
  • Anchor约束

约束的查找

要修改View的约束,首先得找到原定义的约束吧。或者修改原约束的定义,或者废除原约束添加新的约束。但不管怎样,首先咱们得找到原约束!
相信大家对自动布局很熟悉了,在代码中修改约束也比较常见。但一般都使用IBOutlet的方式获取的特写约束。但如果要获取大量的约束呢,咱们不可以每一个约束都链接上IBOutlet的属性吧。下面介绍两种方式去获取特写的约束:
约束遍历的方式

对于一个View与其父View(或兄弟之间的约束),通过对其父View的约束进行遍历,通过约束的属性进行查找:

titleLabel.superview?.constraints.forEach { constraint in
      if constraint.firstItem === titleLabel && 
      constraint.firstAttribute == .centerX {
        constraint.constant = 50.0
        return
        }
      }

这种方式有两个缺点:1.如果titleLabel不是firstItem,而是secondItem呢?那判断条件还得去判断一次; 2.如果firstItem有很多兄弟节点,有很多关于它的约束,那查找起特写的约束会相当麻烦。

为约束设置identifier的方式

为将要修改的约束设置一个identifier,那查找起来就方便多了。直接通过判断identifier去实现查找。

titleLabel.superview?.constraints.forEach { constraint in
      if constraint.identifier == "TitleCenterY" {
          constraint.isActive = false
          continue
      }
 }

实现动画

当你修改了约束以后,通过调用view.layoutIfNeeded()去刷新页面,让约束生效。所以实现约束动画的方式就是将view.layoutIfNeeded()放到View动画的动画部分:

UIView.animate(withDuration: 1.0, delay: 0.0,
  options: .curveEaseIn,
  animations: {
    view.layoutIfNeeded()
  },completion: nil
)

约束生效的方式

以前写约束总是通过创建约束,然后通过View.addConstraints的方式让约束生效。让约束生效的另一种方式就是,调用约束的active方法

constraint.isActive = true
//另一种方法
headerview.addConstraints([constraint01,constraint02,constraint03])

Anchor约束

iOS9.0以后的一个类NSLayoutAnchor。它能让我们创建约束更加直观,方便。

  @available(iOS 9.0, *)
    open var centerXAnchor: NSLayoutXAxisAnchor { get }
//下面是一个例子
 let conX = detailView.centerXAnchor.constraint(equalTo:
headerview.centerXAnchor)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值