gpt4 book ai didi

ios - 完美的 Swift3 Boing

转载 作者:可可西里 更新时间:2023-11-01 06:01:38 25 4
gpt4 key购买 nike

为栏打开设置动画...

@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
}
)

太好了...

enter image description here

但是你怎么让它变成这样呢?

enter image description here

(我知道的唯一方法是使用 CADisplayLink,并使用几行代码实现 Spring 衰减。)这在 UIKit 中可用吗?

最佳答案

您可以使用 spring animation method内置于 UIView 中:

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 秒更长的动画持续时间;我认为我的值看起来不错,但您可以使用它们来获得您想要的确切效果。

由于动画持续时间较长,我发现我可以在上一个动画仍在运行时点击触发打开/关闭的按钮。在完成 block 中设置 barShut 意味着该栏不会对所有点击使用react。我将开关移到了动画之外以解决这个问题。

关于ios - 完美的 Swift3 Boing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42859229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com