为酒吧开放动画……
@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
}
)
那很棒 …
但你怎么会这样做呢?
(我知道这样做的唯一方法是使用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意味着条形图对所有水龙头都没有反应.我在动画之外移动了切换来解决这个问题.