1. ホーム
  2. ios

[解決済み】NSLayoutConstraintsはアニメーション可能ですか?重複

2022-04-11 05:34:04

質問

私は、いくつかのビューをアニメーション化し、ランドスケープで巨大なキーボードによってブロックされるようにしようとしています。 単にフレームをアニメーションさせればうまくいきますが、他の人は、これは逆効果で、代わりにNSLayoutConstraintsを更新するべきだと提案しました。 しかし、それらはアニメーション可能ではないようです。 どなたか、うまく動作させた方はいらっしゃいますか?

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

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

解決方法は?

このパターンを忠実に再現してください。

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

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

ここで myView はビューで self.heightFromTop が追加されました。アニメーションブロックで行ったのは制約の設定だけなので、すぐにレイアウトが発生するわけではありませんから、あなたのビューは "jump"です。このコードでは、レイアウトは、制約を設定した後の次の実行ループで発生します。 heightFromTop.constant その時には、すでにアニメーションブロックの範囲外になっています。

Swift 2では。

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

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