我试图通过使用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。
任何有关如何实现这一目标的帮助表示赞赏。
答案 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];
}];