约束的Swift动画不起作用

时间:2017-09-01 02:08:05

标签: swift animation uiview

以下功能只是将视图移动到新位置。它没有显示动画:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    UIView.animate(withDuration: 0.9, animations: {
        //self.leadingConst.constant -= 200

        self.view.setNeedsLayout()
    })
}

2 个答案:

答案 0 :(得分:1)

几周前我遇到了同样的问题。问题归结为一些问题。我正在混合以编程方式添加视图并将它们添加到故事板,我没有调用layoutSubviews(),而我将我的约束作为IBOutlets添加为弱变量。所以我建议只使用故事板(否则动画开始快速复杂化)并使你的leadingConst约束成为var。您还应该在动画块中移动要设置动画的对象,然后使用完成块重置约束。

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    view.layoutSubviews()
    UIView.animate(withDuration: 0.9, animations: {

        //something like this
        self.animatableObject.origin.x -= 200

    }, completion: {(finished: Bool) in

        self.leadingConst.constant -= 200

    })
}

我不确定你想要制作什么动画,所以origin.x行只是一个例子。

答案 1 :(得分:0)

self.leadingConst.constant -= 200应该在UIView.animate之外,如下所示:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    self.leadingConst.constant -= 200
    UIView.animate(withDuration: 0.9, animations: {
        self.view.setNeedsLayout()
    })
}

参考:trying to animate a constraint in swift