Estoy tratando de animar el color del texto en un UILabel a pulso de: [Negro] a [Blanco] a [Negro] y repita.¿Animar a UILabel pulsante?
- (void)timerFlash:(NSTimer *)timer {
[[self navTitle] setTextColor:[[UIColor whiteColor] colorWithAlphaComponent:0.0]];
[UIView animateWithDuration:1
delay:0
options:UIViewAnimationOptionAllowUserInteraction
animations:^{[[self navTitle] setTextColor:[[UIColor whiteColor] colorWithAlphaComponent:1.0]];}
completion:nil];
}
.
[self setFadeTimer:[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerFlash:) userInfo:nil repeats:YES]];
En primer lugar no estoy seguro de mi método, mi plan (como se puede ver arriba) fue la creación de un bloque de animación y llamarlo usando un NSTimer repitiendo hasta que se cancele.
Mi segundo problema (como puede ver arriba) es que estoy animando desde negro (alfa 0) a blanco (alfa 1) pero no sé cómo animar de nuevo a negro para que la animación gire a la perfección
Esencialmente, lo que quiero es el color del texto para pulsar en un UILabel hasta que el usuario presiona un botón para continuar.
EDIT_001:
me estaba metiendo en problemas porque no se puede animar [UILabel setColor:] Sin embargo, puede animada [UILabel setAlpha:] por lo que me va a dar que un ir.
EDIT_002:
- (void)timerFlash:(NSTimer *)timer {
[[self navTitle] setAlpha:0.5];
[UIView animateWithDuration:2
delay:0
options:UIViewAnimationOptionAllowUserInteraction
animations:^{[[self navTitle] setAlpha:0.9];}
completion:nil];
}
Esto funciona (Por cierto: yo quiero que pare por lo que me enganchó hasta un NSTimer para que pueda cancelar esa) la única cosa es que esto anima a midGray a nearWhite y luego vuelve a aparecer. ¿Alguien sabe cómo animaría desde cerca de White a MidGray para que tenga un buen ciclo sin problemas?
EDIT_003: (Solución)
El código sugerido por Dave DeLong (véase más adelante) no funciona cuando de hecho modificado para utilizar el atributo de estilo opacidad CALayer:
UILabel *navTitle;
@property(nonatomic, retain) UILabel *navTitle;
.
// ADD ANIMATION
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"opacity"];
[anim setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[anim setFromValue:[NSNumber numberWithFloat:0.5]];
[anim setToValue:[NSNumber numberWithFloat:1.0]];
[anim setAutoreverses:YES];
[anim setDuration:0.5];
[[[self navTitle] layer] addAnimation:anim forKey:@"flash"];
.
// REMOVE ANIMATION
[[[self navTitle] layer] removeAnimationForKey:@"flash"];
No estoy 100% convencido de que animateWithDuration trabaja con NSTimer como pueda No conseguirá hacer otra cosa que no sea pop de un color al siguiente sin animación. – fuzzygoat