4

次の 2 つの状態がありUIViewます。

ここに画像の説明を入力 ここに画像の説明を入力

@IBactionforを使用してそれらの間にアニメーションがありますbutton:

@IBAction func tapped(sender: UIButton) {
    flag = !flag
    UIView.animateWithDuration(1.0) {
        if self.flag {
            NSLayoutConstraint.activateConstraints([self.myConstraint])
        } else {
            NSLayoutConstraint.deactivateConstraints([self.myConstraint])
        }
        self.view.layoutIfNeeded() //additional line
    }
}

アニメーションは、追加の行を追加した場合にのみ機能します:

しかし、その行を削除するUIViewと更新されますが、アニメーションがなければすぐに発生します。

なぜこの行はそんなに違いを生むのですか? それはどのように機能していますか?

4

1 に答える 1

3

私が理解しているように、制約を変更してもビューのレイアウトはすぐには更新されません。変更はキューに入れられ、次にシステムがレイア​​ウトを更新するときにのみ適用されます。

アニメーション ブロック内に layoutIfNeeded を配置すると、アニメーション ブロック中にビューの変更が強制的に適用されます。それ以外の場合は、アニメーションが設定された後に実行されます。

于 2015-07-11T21:16:37.063 に答える