私はウェブ上の良いチュートリアル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()
たが、アニメの動作もちゃんと確認できました。
だから私の質問は次のとおりです。
どちらがより良い方法ですか?
これら 2 つのコードが同じように機能するのはなぜですか?
を削除する
layoutIfNeeded()
と、アニメーションが機能しなくなりました。これは、ビューをすぐに強制的に更新しないと、アニメーション ブロックの後に次のビュー更新サイクルが発生し、アニメーションが無効になるためです。