美文网首页iOS 开发 iOS技术专题
利用Constraint给Storyboard添加动画

利用Constraint给Storyboard添加动画

作者: 长空北 | 来源:发表于2016-04-01 13:52 被阅读310次

    自从使用Storyboard后,感觉添加动画变的操作好复杂,以前只要几行代码可以搞定的事情,到了Storyboard时代,变成了拖来拖去的操作,复杂的界面想加个动画有时还觉得无从下手,下面介绍的一个动画操作很简单,利用Constraint的优先级来设置动画,这个是这篇文章的核心。

    首先展示下动画效果

    amimate.gif

    好了,我们开始一步步实现这个动画

    首先拖动2个View到ViewController上,设置各自的约束,然后拖一个UISwitch放在界面下方,方便控制动画

    红色View的约束如下

    Paste_Image.png

    蓝色View的约束如下:

    Paste_Image.png

    现在我们需要红色的View可以扩充到全屏,那么接下来我们需要添加一个约束,就是红色View到父View的右侧约束

    Paste_Image.png

    再设置下约束的优先级为High


    Paste_Image.png

    接下来我们需要降低蓝色View的右侧约束的优先级,这样才可以让红色View可以扩充到父View

    Paste_Image.png

    同样设置优先级成High

    Paste_Image.png

    然后把这个2个约束都拖到代码里面

    @IBOutlet weak var redViewToViewConstraint: NSLayoutConstraint!
    @IBOutlet weak var blueViewTrailingConstraint: NSLayoutConstraint!
    

    接下来设置动画,我们需要将红色View右侧约束变成0,同时需要降低蓝色View右侧约束的优先级

    这里有个示意图,大致画了一下,大家随便看看下吧

    Paste_Image.png
    func updateConstraintsForMode(isOn : Bool)
     {
        if (isOn) {
          self.redViewToViewConstraint.constant = 0
          self.blueViewTrailingConstraint.priority = UILayoutPriorityDefaultHigh - 1
        } else {
          self.blueViewTrailingConstraint.priority = UILayoutPriorityDefaultHigh + 1
        }
     }
    

    最后将UISwitch的Action拖进代码,加上启用动画代码,就完成啦

    @IBAction func switchAction(sender: UISwitch) {
        updateConstraintsForMode(sender.on)
        UIView.animateWithDuration(1.0) { () -> Void in
          self.view.layoutIfNeeded()
        }
     }
    

    Demo代码在这里

    相关文章

      网友评论

        本文标题:利用Constraint给Storyboard添加动画

        本文链接:https://www.haomeiwen.com/subject/qdbelttx.html