我在网上找到的所有示例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