UIViewPropertyAnimator
のオンラインで見つかったすべての例では、ビューが一般的にレイアウトされる方法である自動レイアウトを使用するのではなく、フレームを設定することによってレイアウトされたビューを使用します。自動レイアウトを使用する場合、ビューは私が望む位置にアニメートしますが、その後はモデルの位置に戻す方法がわかりません。自動レイアウトでUIViewPropertyAnimatorを使用するには?
// Move a view that is constrained to the center of its superview
UIViewPropertyAnimator(duration: 1, curve: .linear) {
testView.center = CGPoint(x: 10, y: 10)
}.startAnimation()
明らかに何らかの制約が追加されていますか?アニメーションを実行する前後にコンテナビューの制約を記録しました。
CONSTRAINTS BEFORE:
view: [<NSLayoutConstraint:0x618000094f00 UIView:0x7fd764004050.centerX == UIView:0x7fd75fd00000.centerX (active)>, <NSLayoutConstraint:0x618000092de0 UIView:0x7fd764004050.centerY == UIView:0x7fd75fd00000.centerY (active)>]
CONSTRAINTS AFTER:
view: [<NSLayoutConstraint:0x618000094f00 UIView:0x7fd764004050.centerX == UIView:0x7fd75fd00000.centerX (active)>, <NSLayoutConstraint:0x618000092de0 UIView:0x7fd764004050.centerY == UIView:0x7fd75fd00000.centerY (active)>, <NSLayoutConstraint:0x6100000922a0 'UIView-Encapsulated-Layout-Height' UIView:0x7fd75fd00000.height == 667 (active)>, <NSAutoresizingMaskLayoutConstraint:0x610000092570 h=-&- v=-&- 'UIView-Encapsulated-Layout-Left' UIView:0x7fd75fd00000.minX == 0 (active, names: '|':UIWindow:0x7fd75fc07110)>, <NSAutoresizingMaskLayoutConstraint:0x610000092890 h=-&- v=-&- 'UIView-Encapsulated-Layout-Top' UIView:0x7fd75fd00000.minY == 0 (active, names: '|':UIWindow:0x7fd75fc07110)>, <NSLayoutConstraint:0x610000091670 'UIView-Encapsulated-Layout-Width' UIView:0x7fd75fd00000.width == 375 (active)>]
ここでは何が起こっていますか?自動レイアウトで配置されたビューのアニメーションをどのように処理すればよいですか?アップルはユーザーにフレームベースのレイアウトに戻ることを奨励していますか?
これは、UIViewアニメーションブロックと同じ古い方法です。改善はありませんか?また、それらの制約はどのように生成されますか? – GoldenJoe
UIViewPropertyAnimatorは、アニメーションを一時停止、反転などできるように設定できるオブジェクトです。速度などを制御する独自のカーブを作成できます。 – vacawama
私はあなたが制約について尋ねていることを理解していません。私は、ビューに新しい制約を適用してアニメートする方法をデモしていました。 – vacawama