2016-07-29 3 views
1

UIViewサブクラス内で、ビューの本来のサイズを変更する必要があるアニメーションの一部をオーケストレーションしようとしています。NSLayoutConstraintのアニメーション化に固有のサイズを変更する際に問題が発生する

CATransaction完了ブロックでは、サイズの変更を反映するためにinvalidateIntrinsicContentSize()を呼び出し、制約をアニメーション化した直後に呼び出します。

self.layoutIfNeeded() 
UIView.animateWithDuration(2) { 
    NSLayoutConstraint.deactivateConstraints(oldConstraints) 
    NSLayoutConstraint.activateConstraints(newConstraints) 
    self.layoutIfNeeded() 
} 

しかし、奇妙なことがdeactivateConstraintsactivateConstraints方法に提供制約と一緒に、たまたま、私はまた、ビューのサイズが同じ期間に沿ってアニメーションされている参照してください。

これは実際に動作しているビデオです。

https://www.youtube.com/watch?v=OgM378Wryd0

ここで問題の図です。

enter image description here

私の意図はすぐにビューのサイズを変更し、位置決め制約と一緒にそれをアニメーション化しないことです。

+0

animateWithDurationメソッドを使用してアニメーション化しないようにする理由は何ですか? –

+0

私の意図は、サイズではなくポジションを動かすことです。 –

答えて

1

アニメーションブロックで最初のlayoutIfNeeded()呼び出しをラップし、完了時に位置アニメーションを開始するという解決策があります。

サイズの変更を実際にアニメーション化しているわけではないので、見た目には見えません。すぐに起こりたいと思います。だから、私はまだエレガントな解決法、あるいはそれが不可能な理由を探しています。

関連する問題