动画UILabel增长和缩小

时间:2016-06-13 11:00:38

标签: ios objective-c animation autolayout uilabel

我在屏幕的左上角有一个小按钮,它有约束设置到位。点击此按钮时,我希望UIlabel从屏幕的右边缘展开。 UIlabel几乎占据了屏幕的宽度,高度约为8Points。它包含一行文字。在反转动画之前它将显示2秒钟,以便UILabel缩小回小按钮。我是ios动画的新手,我很困惑,因为有很多类型!我需要知道:

1)我可以用什么类型的动画技术来创造这种效果?代码会很好,但我想指出正确的研究方向。

2)我读过UILabel对动画的反应不足。以我描述的方式动画它们是否有问题?

3)UILabel中的文本(以及标签本身!)必须通过与动画同时进行的某种约束分配来适应各种屏幕尺寸。必须通过编程方式自动布局设置UILabel的大小/位置。

谢谢

更新: 我在animationWithDuration方法之前添加了这一行(注意:(10,5,....)是小按钮的位置):

_questionDisplay = [[UILabel alloc]initWithFrame:CGRectMake(10, 5, 0, 30)];

..第一个动画块中的这一行:

_questionDisplay.frame = CGRectMake(10, 5, 600, 30);

..以及以下animationWithDuration方法之后的这一行,在第一次通过NSTimer后调用3.5秒:

_questionDisplay.frame = CGRectMake(10, 5, 0, 30);

标签缩小后,将从视图中删除。

这在iPhone6 +上看起来不错,但在4s看起来不对,因为标签没有按照我需要的约束来调整大小。

2 个答案:

答案 0 :(得分:2)

目标c

[UILabel animateWithDuration:1
             animations:^{
                 yourView.transform = CGAffineTransformMakeScale(1.5, 1.5);
             }
             completion:^(BOOL finished) {
                 [UILabel animateWithDuration:1
                                  animations:^{
                                      yourView.transform = CGAffineTransformIdentity;

                                  }];
             }];

夫特

UILabel.animateWithDuration(1, animations: { () -> Void in
yourView.transform = CGAffineTransformMakeScale(1.5, 1.5)
}) { (finished: Bool) -> Void in
    UILabel.animateWithDuration(1, animations: { () -> Void in
        yourView.transform = CGAffineTransformIdentity
    })}

答案 1 :(得分:1)

它消失了,因为你明确给出了一个尺寸。 (如果你想要多个屏幕大小正确使用等于宽度(比例)到superview 约束而不是固定宽度。在此之后,使用上面提到的方法。当你的标签出现时,它将有由于比例宽度约束导致宽度正确,动画将使其增长并缩小回原始大小。将动画块保留为空(没有明确的帧更改!) 只需更改缩放系数(目前为1.2),直到它适合您为止!

 1) 2) and 3) are all handled here! The label font itself adjusts so you just need to add the animation
 [UIView animateWithDuration:0.5 animations:^{
    // grow the label up to 130%, using a animation of 1/2s
    yourLabel.transform = CGAffineTransformMakeScale(1.2,1.2); //
} completion:^(BOOL finished) {
    // When the "grow" animation is completed, go back to size 100% using another animation of 1/2s
    [UIView animateWithDuration:3.5 animations:^{
        yourLabel.transform = CGAffineTransformIdentity;
    }];
}];