Swift:使用动画以编程方式更改特定约束

时间:2018-06-21 04:27:52

标签: swift animation constraints

我有两个imageview,在两个imageViewz之间,我有一个5pt“ DragButton”的小对象。

在左侧的图像视图中,我有一个针对拖动按钮的右侧边缘约束。

我想在代码中更改此约束,我想删除将此约束绑定到拖动按钮的约束,并用将其绑定到右侧屏幕边缘的约束替换它,并且我希望该约束为像l图像一样占据0 pt。

我想给他一个动画,这里有两个屏幕截图,可以帮助您理解:

first picture

second picture

2 个答案:

答案 0 :(得分:0)

在情节提要中添加两个约束(也可以在代码中创建)
1)Image.right <-> ScreenEdge.right(名为pinRight),
2)Image.right <-> DragButton.left(名为pinRightWithDragButton)。
3)将优先级设置为pinRight 999(小于pinRightWithDragButton)(两个都存在而不会发出警告)
4)创建两者的IBOutlet,不要创建IBOutlet weak,删除weak
5)一次启用一个而禁用另一个

func makeImageView(fullScreen: Bool) {
    pinRight.isActive = fullScreen
    pinRightWithDragButton.isActive = !fullScreen
    UIView.animate(withDuration: 0.5) {
        view.layoutIfNeeded()
    }
}

*或者,您也可以更改其优先级。

答案 1 :(得分:0)

  

为此任务使用StackView

我建议您将所有3个对象添加到水平StackView中(选择所有3个对象,然后按提供的图像中突出显示的按钮(不要被我高度专业的编辑技巧吓倒了:) enter image description here

  

将约束添加到StackView,然后使用StackView选项。另外,仅在视图和dragButton中添加高度和宽度。

enter image description here

我要添加Spacing-> 5。

接下来,将IBOutlets添加到ViewController的所有3个对象中,并在需要时简单地隐藏对象,其余对象将填充整个StackView,然后取消隐藏,这些对象将重新放回视图中并看起来不错。 (例如:obj1.isHidden = true)