为酒吧开放动画……
@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,usingSpringWithDamping: 0.2,initialSpringVelocity: 3,options: [],animations: { self.view.layoutIfNeeded() },completion: nil) }
你需要更长的动画持续时间而不是0.15秒,以使反弹看起来真实;我认为我看起来非常好的价值,但你可以玩它们来获得你所追求的确切效果.
由于动画持续时间较长,我发现在上一个动画仍在运行时我可以点击触发打开/关闭的按钮.在完成块中设置barShut意味着条形图对所有水龙头都没有反应.我在动画之外移动了切换来解决这个问题.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。