ios – 完美的Swift3 Boing

为酒吧开放动画……

@IBOutlet var barHeight: NSLayoutConstraint!


    barHeight.constant = barShut?30:100
    self.view.layoutIfNeeded()
    t = !barShut?30:100

    UIView.animate(withDuration: 0.15,
        delay: 0,
        options: UIViewAnimationOptions.curveEaseOut,

        animations: { () -> Void in
            self.barHeight.constant = t
            self.view.layoutIfNeeded()
        },

        completion: {_ in
            Screen.barShut = !Screen.barShut
        }
    ) 

那很棒 …

《ios – 完美的Swift3 Boing》

但你怎么会这样做呢?

《ios – 完美的Swift3 Boing》

(我知道这样做的唯一方法是使用CADisplayLink,使用几行代码进行弹簧衰减.)这在UIKit中是否可用?

最佳答案 您可以使用内置于UIView的
spring animation method

func toggleBar() -> Void {
    self.view.layoutIfNeeded()
    let newHeight:CGFloat = !barShut ? 30:100
    barShut = !barShut

    barHeightConstraint.constant = newHeight

    UIView.animate(withDuration: 1.5, delay: 0, usingSpringWithDamping: 0.2, initialSpringVelocity: 3, options: [], animations: {
        self.view.layoutIfNeeded()
    }, completion: nil)

}

你需要更长的动画持续时间而不是0.15秒,以使反弹看起来真实;我认为我看起来非常好的价值,但你可以玩它们来获得你所追求的确切效果.

由于动画持续时间较长,我发现在上一个动画仍在运行时我可以点击触发打开/关闭的按钮.在完成块中设置barShut意味着条形图对所有水龙头都没有反应.我在动画之外移动了切换来解决这个问题.

点赞