如何使用自动布局约束为移动 UILabel 设置动画?

Posted

技术标签:

【中文标题】如何使用自动布局约束为移动 UILabel 设置动画?【英文标题】:How do I animate the move a UILabel with auto layout constraints? 【发布时间】:2013-10-04 13:38:00 【问题描述】:

我正在尝试将 UILabel 向左移动并为移动设置动画。 UILabel 是从故事板创建的,并具有以下约束:

但是,如果我尝试使尾随空格常数等于 150 而不是 20 以将其向左移动,它会奇怪地向左弹跳一秒钟,然后又回到中间。于是我将左前导约束的优先级降低到了900,但同样的事情还是发生了。

所以我尝试了:

self.textToReadLabel.transform = CGAffineTransformMakeTranslation(-500.0, 0.0);

它会移动它,但如果我使用动画,它会滑出屏幕,滑回屏幕,然后停在它应该的位置……毕竟这些戏剧性的东西。

我将如何实现这一目标?

点击按钮移动标签时发生的全部情况:

        self.textHorizontalPlacementConstraint.constant = 150.0;
        self.textHorizontalPlacementConstraint2.constant = -110.0;
        [UIView animateWithDuration:1.0 animations:^
            [self.view layoutIfNeeded];
        ];

        CATransition *animation = [CATransition animation];
        animation.duration = 0.5;
        animation.type = kCATransitionFade;
        animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
        [self.textToReadLabel.layer addAnimation:animation forKey:@"changeTextTransition"];

        // Change the text
        self.textToReadLabel.text = @"text";
    

【问题讨论】:

【参考方案1】:

要获得动画布局更改,您需要更改NSLayoutConstraint 中的constant,然后调用:

    self.textHorizontalPlacementConstraint.constant = 150.0;
    self.textHorizontalPlacementConstraint2.constant = -110.0;
    [UIView animateWithDuration:1.0 animations:^
        [self.view layoutIfNeeded];
    ];

还要确保你的约束是一致的。所以如果增加 trailingSpace 也会减少leadingSpace。

【讨论】:

正如我所说,我尝试更改常量(包括调用 layoutIfNeeded)。我试着改变他们两个,但同样的事情发生了。它飞出屏幕一秒钟然后重新出现。 我添加了代码,但似乎不是特别有用。还有什么我可以补充的吗? 我试过了,效果还是一样。这是我正在谈论的视频,也许会有所帮助:cl.ly/3l2E401N3Q3h 编辑:我添加了我认为可能相关的所有代码。

以上是关于如何使用自动布局约束为移动 UILabel 设置动画?的主要内容,如果未能解决你的问题,请参考以下文章

UILabel 自动布局适合

*只有一个*动画块(UILabel)使用自动布局的问题

UILabel尺寸更改不会使用自动布局设置动画

UILabel 有时不能正确换行(自动布局)

如何设置自动布局,以便 UILabel 调整大小并根据需要移动其他视图

使用自动布局约束旋转后对齐 UILabel 文本