Pregunta

Voy a terminar con una serie de canales RSS, y quisiera una etiqueta o algo parecido para mostrarlos en la parte inferior de la vista. Quisiera animado a través de cada alimentación de la matriz.

Esto es lo que tengo hasta el momento para animar, que trabaja para el fundido, pero sólo anima el último elemento de la matriz.

feed = [[UILabel alloc] initWithFrame:CGRectMake(0,380,320,43)];
[self.view addSubview:feed];

feed.alpha=1;

NSArray *feeds = [NSArray arrayWithObjects:[NSString stringWithFormat:@"1234567"],[NSString stringWithFormat:@"qwerty"],[NSString stringWithFormat:@"asdfgh"],nil];

for (NSString* f in feeds){

    feed.text=f;

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
    [UIView setAnimationDuration:2.0f];
    feed.alpha=0;
    [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
    [UIView commitAnimations];

}

Estoy seguro de que su simple.

Gracias

¿Fue útil?

Solución

En primer lugar usted debe considerar realmente una mejor convención de nomenclatura. Llamar a un UILabel un alimentación no es muy útil para el futuro cuando se tiene que volver y ver su código. Yo la llamaría feedLabel . Entonces, cuando usted iterar a través de su lista de canales, sólo puede for (NSString *feed in feeds) y va a tener más sentido. Y así se feedLabel.text = feed;.

En cualquier caso, el problema que veo con su código es que su están estableciendo repetidamente la alfa a cero en su bucle, pero nunca se la puso de nuevo a uno. En otras palabras, usted no está haciendo un cambio en el valor alfa. Se mantiene igual en cada iteración.

Así que tal vez podría aclarar lo que estamos tratando de hacer. Si desea hacer desaparecer el texto entre los cambios en el texto, tendrá una animación y una metodología diferente. En lugar de un bucle, la cadena de sus animaciones de tal manera que cuando su didStopSelector, que establece el texto y empezar la siguiente. Algo así como:

- (void)performAnimation;
{
  [UIView beginAnimations:nil context:NULL];
  [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
  [UIView setAnimationDuration:2.0f];
  feed.alpha=0;
  [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:)];
  [UIView commitAnimations];
}

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
  feed.alpha = 1.0;
  NSString *nextFeed = [self getNextFeed]; // Need to implement getNextFeed
  if (nextFeed)
  {
    // Only continue if there is a next feed.
    [feed setText:nextFeed];
    [self performAnimation];
  }
}

Otros consejos

He intentado su código, se desvanece en la primera alimentación, pero no entra en el evento animationDidStop. es por eso que no puede llamar performAnimation nuevo. ¿hay algún conjunto para la animación (delegado o protocolo, etc ..)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top