UIView.animate 没有完美地动画布尔值
Posted
技术标签:
【中文标题】UIView.animate 没有完美地动画布尔值【英文标题】:UIView.animate not animating bool value perfectly 【发布时间】:2016-11-17 08:50:14 【问题描述】:我尝试为 isHidden 设置动画,它似乎工作正常,但如果我通过将 yes
设置为 true 5 次错误地为 isHidden=false 设置了 5 次动画,那么有时我应该为 isHidden 设置动画=true 2 或更多时间让我的 UIView 可见!
我错过了什么吗?
if (yes)
UIView.animate(withDuration: 0.3, delay:0, animations:
myLabel.isHidden=false
else
UIView.animate(withDuration: 0.3, delay:0, animations:
myLabel.isHidden=true
【问题讨论】:
【参考方案1】:您不应为视图的“isHidden”参数设置动画。您应该为其 alpha 设置动画。
if (yes)
UIView.animate(withDuration: 0.3, delay:0, animations:
myLabel.alpha=1.0
else
UIView.animate(withDuration: 0.3, delay:0, animations:
myLabel.alpha=0.0
-- 更新--
如果你想在动画之后隐藏视图,你可以使用这个:
myLabel.isHidden=false
UIView.animateWithDuration(0.3, delay: 0.0, options: .CurveEaseOut, animations:
myLabel.alpha=1.0
, completion: finished in
)
UIView.animateWithDuration(0.3, delay: 0.0, options: .CurveEaseOut, animations:
myLabel.alpha=0.0
, completion: finished in
myLabel.isHidden=true
)
【讨论】:
但我需要为 isHidden 设置动画,因此在将其从视图中移除后,自动布局会缩小布局。【参考方案2】:我认为问题在于您在 Bool 类型上使用线性动画,它只有 2 个值(false = 0,true = 1)和介于两者之间的任何其他值(它是脉冲)。
试试这个:
if (yes)
myLabel.alpha = 0
myLabel.isHidden = false
UIView.animate(withDuration: 0.3, animations:
myLabel.alpha = 1
)
else
UIView.animate(withDuration: 0.3, animations:
myLabel.alpha = 0
, completion: (status) in
myLabel.isHidden = true
)
【讨论】:
但我需要为 isHidden 设置动画,因此在将其从视图中移除后,自动布局会缩小布局。 所以尝试使用 alpha 属性以及UILabel
框架的高度进行动画处理。以上是关于UIView.animate 没有完美地动画布尔值的主要内容,如果未能解决你的问题,请参考以下文章
NSLayoutConstraint 不使用 UIView.animate 进行动画处理