NSLayoutConstraints はアニメーション化できますか? [重複] 質問する

NSLayoutConstraints はアニメーション化できますか? [重複] 質問する

いくつかのビューをアニメーション化して、横向きの巨大なキーボードでブロックされるようにしようとしています。フレームをアニメーション化するだけでもうまくいきますが、他の人は、これは逆効果なので、代わりに NSLayoutConstraints を更新すべきだと示唆しています。しかし、アニメーション化できないようです。うまく動作させた人はいますか?

//heightFromTop is an NSLayoutConstraint referenced from IB
[UIView animateWithDuration:0.25 animations:^{
    self.heightFromTop.constant= 550.f;
}];

その結果、問題の高さまで瞬時にジャンプできます。

ベストアンサー1

次のパターンに正確に従ってください:

self.heightFromTop.constant = 550.0f;
[myView setNeedsUpdateConstraints];

[UIView animateWithDuration:0.25f animations:^{
   [myView layoutIfNeeded];
}];

は、 が追加されたmyViewビューですself.heightFromTop。アニメーション ブロックで実行したことは制約の設定のみであり、レイアウトがすぐには発生しないため、ビューは「ジャンプ」します。コードでは、 を設定した後の次の実行ループでレイアウトが実行されheightFromTop.constant、その時点では、すでにアニメーション ブロックのスコープ外になっています。

Swift 2 の場合:

self.heightFromTop.constant = 550
myView.setNeedsUpdateConstraints()

UIView.animateWithDuration(0.25, animations: {
   myView.layoutIfNeeded()
})

おすすめ記事