我没有在网上学习使用UIStackView
和阅读好的教程。在教程中,作者编写了如下代码来制作动画:
@IBAction func addStar(sender: AnyObject) {
let starImgVw:UIImageView = UIImageView(image: UIImage(named: "star"))
starImgVw.contentMode = .ScaleAspectFit
self.horizontalStackView.addArrangedSubview(starImgVw)
UIView.animateWithDuration(0.25, animations: {
self.horizontalStackView.layoutIfNeeded()
})
}
但是,当我克隆存储库并稍微更改代码时,我仍然正确地看到了相同的动画。
@IBAction func addStar(sender: AnyObject) {
let starImgVw:UIImageView = UIImageView(image: UIImage(named: "star"))
starImgVw.contentMode = .ScaleAspectFit
UIView.animateWithDuration(0.25, animations: {
self.horizontalStackView.addArrangedSubview(starImgVw)
self.horizontalStackView.layoutIfNeeded()
})
}
我移动self.horizontalStackView.addArrangedSubview(starImgVw)
到动画块的内部。
我也在removeStar
功能上尝试了同样的事情;这次移动了self.horizontalStackView.removeArrangedSubview(aStar)
和aStar.removeFromSuperview()
,但我也确认了动画工作正常。
所以我的问题如下:
哪个是更好的方法?
为什么这两个代码以相同的方式工作?
当我删除
layoutIfNeeded()
时,动画不起作用。这是因为如果我不强制立即更新视图,那么下一个视图更新周期会发生在动画块之后,因此动画不再有效,对吧?