swift 当我尝试在代码块外编辑文本标签时 animateWithDuration 中断

swift animateWithDuration breaks when I try to edit text label outside code block

在我的应用程序中,我有两个看起来像自定义分段控件的排序按钮。

VC 初始化时选择了 Button1。 如果你然后按下 Button2 UIView 将从 Button1Button2 动画 - 这是要显示的效果选择了什么按钮

我的代码如下所示:

@IBAction func BtnOneDidTouch(sender: AnyObject) {
        myLabel.text = "Button 1"
        UIView.animateWithDuration(0.7,
            delay: 0,
            usingSpringWithDamping: 0.7,
            initialSpringVelocity: 0.5,
            options: nil,
            animations: {
                self.underLine.center = CGPointMake(self.btnOne.center.x, self.btnOne.center.y + 16)
            }, completion: nil
        )
    }


    @IBAction func BtnTwoDidTouch(sender: AnyObject) {
        myLabel.text = "Button 2"
        UIView.animateWithDuration(0.7,
            delay: 0,
            usingSpringWithDamping: 0.7,
            initialSpringVelocity: 0.5,
            options: nil,
            animations: {
                self.underLine.center = CGPointMake(self.btnTwo.center.x, self.btnTwo.center.y + 16)
            }, completion: nil
        )
    }

underLine 是正在动画的视图。

如果我注释掉

myLabel.text = "Button 1"

myLabel.text = "Button 2"

从它将起作用的功能来看。 但是如果我离开它们,它就不起作用了。

它失败了: 如果您单击 Btn2,视图将滑动然后再次跳回,并且只会更改文本标签。

我想要的是让视图滑动并停留并更改标签。

问题可能归结于限制。您正在设置动画的视图可能有您给它的约束或 xcode 给它的约束。

当您设置文本时,它会触发布局,从而将视图扭曲回初始的自动布局位置。

尝试将动画视图 translatesAutoresizingMaskIntoConstraints 属性 设置为 NO。

或者,为视图提供前导约束和顶部约束,CTRL 拖动它们以创建 IBOutlet,然后在代码中更改约束常量并为约束变化设置动画。

有关如何为约束设置动画的详细信息,请参阅:How do I animate constraint changes?