【发布时间】:2015-09-10 23:54:55
【问题描述】:
我不是在学习UIStackView 的用法,而是在网上阅读a good tutorial。在教程中,作者编写了如下代码来制作动画:
@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()时,动画无法正常工作。这是因为如果我不强制立即更新视图,那么下一个视图更新周期会发生在动画块之后,因此动画不再有效,对吧?
【问题讨论】:
标签: ios animation uiview uistackview