Question

Je vais finir avec un tableau de flux RSS, et souhaite une étiquette ou un tel pour les afficher au bas de la vue. Je voudrais animer à travers chaque flux dans le tableau.

est ce que j'ai jusqu'à présent Animer, qui travaille pour le fondu, mais seul le dernier ANIME élément du tableau.

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

}

Je suis sûr que son simple.

Merci

Était-ce utile?

La solution

Tout d'abord, vous devriez vraiment envisager une meilleure convention de nommage. Appeler un UILabel feed est pas très utile pour l'avenir quand vous devez revenir et regardez votre code. Je le nommer feedLabel . Ensuite, lorsque vous itérer à travers votre liste de flux, vous pouvez juste for (NSString *feed in feeds) et il aura plus de sens. Et ainsi va feedLabel.text = feed;.

Quoi qu'il en soit, la question que je vois avec votre code est que vous êtes l'alpha à plusieurs reprises la mise à zéro dans votre boucle, mais vous ne le remettre à un. En d'autres termes, vous n'êtes pas faire un changement à la valeur alpha. Il reste le même à chaque itération.

Alors, vous pourriez peut-être préciser ce que vous essayez de faire. Si vous voulez effacer le texte entre les changements dans le texte, vous aurez besoin d'une autre animation et de la méthodologie. Au lieu d'une boucle, la chaîne de vos animations telles que lorsque votre didStopSelector, vous définissez le texte et commencer la suivante. Quelque chose comme:

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

Autres conseils

i essayé votre code, il disparaît à la première alimentation, mais il ne pénètre pas dans l'événement animationDidStop. thats pourquoi il ne peut pas appeler performAnimation à nouveau. est-il un ensemble d'animation (délégué ou protocole etc ..)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top