2015-02-06 1 views
0

Я пытаюсь вытеснить цвет фона ярлыка с помощью animateWithDuration, но мой код не работает. Вот что я получил:Как убрать цвет фона метки с помощью 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 альфа, но не исчезает с 0,3 до 1,0. Я пытаюсь сделать так, чтобы цвет ярлыка исчезал от 0,3 до 1,0 в непрерывном цикле, сбрасывая альфа до 0,3, так как он достигает 1,0.

Любая помощь в том, как достичь этого, ценится.

+0

Ваш текущий код не имеет особого смысла по ряду причин, но вы пытаетесь выцветает весь ярлык или просто задний план? –

+0

И вы упомянули, что хотите, чтобы затухание «зациклилось» ... Где цикл вступает в игру в вашем коде? –

+0

Вся этикетка, так как на ней не будет текста. У меня создалось впечатление, что мои утверждения if/else создадут какой-то цикл, как я его настроил. Я также играю с использованием переменной int для хранения значений 0,3 и 1,0 вместо использования labelColor.alpha, но до сих пор не понял этого. – user3781632

ответ

0

Вы должны установить начальные условия снаружи блока анимации.

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

Примечание стороны: Это будет исчезать значение альфа всей UILabel, а не только цвет фона. Если вы хотите, чтобы текст, чтобы остаться в то время как ваш фон исчезает, вы должны использовать что-то более вдоль этих линий:

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]; 
}]; 
1

Есть несколько проблем с текущим кодом:

(1) Ваше другое заявление никогда не будет называться так, если 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]; 
     } 
    } 
} 
+0

Спасибо, что напишу, я проверю это. Мне удалось выяснить другой способ настроить его с помощью NSTimer, упомянутого выше.Спасибо за помощь снова! (Не могу повышать, потому что моя репутация низкая. = /) – user3781632

Смежные вопросы