如何使用animateWithDuration淡化标签的背景颜色

时间:2015-02-06 20:30:11

标签: ios objective-c uilabel

我试图通过使用animateWithDuration淡化标签的背景颜色,但我的代码还没有结束。这就是我所拥有的:

.h(在@interface ...中)

IBOutlet UILabel *labelColor;

.m(在viewDidLoad方法中)

[labelColor setBackgroundColor:[UIColor colorWithRed:55/255.0 green:191/255.0 blue:122/255.0 alpha:0.3]];

if (labelColor.alpha >= 0.3) {
    [UIView animateWithDuration:1 animations:^{
        labelColor.alpha = 0.3;
        labelColor.alpha = 1.0;
    }];
} else if (labelColor.alpha == 1.0) {
    labelColor.alpha = 0.3;
}

颜色显示为0.3 alpha,但不会从0.3渐变为1.0。我尝试制作它,使标签的颜色在连续循环中从0.3减少到1.0,当它达到1.0时将alpha重置为0.3。

任何有关如何实现这一目标的帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

您当前的代码存在一些问题:

(1)你的else语句将永远不会被调用,因为如果labelColor.alpha == 1.0它也将是> =。3

(2)在动画块中同时包含labelColor.alpha = 0.3;labelColor.alpha = 1.0;意味着只有第二行(即labelColor.alpha = 1.0;)将指示动画

(3)您没有按照自己的意愿设置循环

(4)你没有动画淡出

如果我实际上理解你要完成的是什么,你可以不断地将整个UILabel内外淡出:

- (void)performLabelFade {
    // If the label is faded out, fade it in
    if (labelColor.alpha == .3) {
        [UIView animateWithDuration:1 animations:^{
            labelColor.alpha = 1.0;
        } completion:^(BOOL finished) {
            // Repeat the current method (i.e. like a loop)
            [self performLabelFade];
        }
    }
    // Else if the label is faded in, fade it out
    else if (labelColor.alpha == 1.0) {
        [UIView animateWithDuration:1 animations:^{
            labelColor.alpha = 0.3;
        } completion:^(BOOL finished) {
            // Repeat the current method (i.e. like a loop)
            [self performLabelFade];
        }
    }
}

答案 1 :(得分:0)

您应该在动画块的设置初始条件。

labelColor.alpha = 0.3;
[UIView animateWithDuration:1 animations:^{
    labelColor.alpha = 1.0;
}];

旁注:这会淡化整个UILabel的Alpha值,而不仅仅是背景颜色。如果你希望文字在你的背景消失时留下来,你应该在这些方面使用更多的东西:

labelColor.backgroundColor = [UIColor colorWithRed:55/255.0 green:191/255.0 blue:122/255.0 alpha:0.3];
[UIView animateWithDuration:1 animations:^{
    labelColor.backgroundColor = [UIColor colorWithRed:55/255.0 green:191/255.0 blue:122/255.0 alpha:1.0];
}];