UILabel总是动画到相同的位置

时间:2012-11-16 08:14:55

标签: ios uilabel

我有一个名为“nameLabel”的UILabel,我把它放在一个动画块中,以便发生这种情况:

_nameLabel.alpha = 1;
CGAffineTransform translate = CGAffineTransformMakeTranslation(50, 50);
_nameLabel.transform = translate;

我认为将UILabel动画到我指定的位置,但它只是从上面的位置动画到我在Interface Builder中拥有它的位置。这里有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

你可以发布动画块和其他相关代码吗?我不确定CGAffineTransformMakeTranslation对标签的作用,但是如果你想为框架位置设置动画,你可以使用它:

CGRect frame = _nameLabel.frame;
frame.origin.y = 100; //Desired height, origin.x can be modified as well. 
//You can also change the frame size here but it wont work on UILabels, you will need `CGAffineTransformScale` for that.

[UIView animateWithDuration: 1.5
                      delay:0.0
                    options:UIViewAnimationCurveEaseInOut | UIViewAnimationOptionBeginFromCurrentState
                 animations:^ {

                     [_nameLabel setFrame:frame];

                 }
                 completion:^ (BOOL finished) {

                 }];

编辑:另一种方式:

CGRect frame = _nameLabel.frame;
frame.origin.y = 100;

[UIView beginAnimations:nil context:nil];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.5];

[_nameLabel setFrame: newFrame];

[UIView commitAnimations];

当前状态可能是标签的当前位置,首先尝试但如果没有任何反应,请删除UIViewAnimationOptionBeginFromCurrentState或将标签的框架设置为动画前的其他位置,并将其移至其初始位置(一个在xib文件中)在动画块中的位置,它的调用。

答案 1 :(得分:1)

请注意,因为Autolayout会导致很多问题。

尝试取消选择“使用Autolayout”

它解决了尝试翻译对象的所有问题。