Domanda

Ho intenzione di finire con una serie di feed RSS, e vorrebbe un'etichetta o qualcosa del genere per visualizzarle sul fondo della vista. Desidero animare attraverso ogni avanzamento nella matrice.

Questo è quello che ho finora per animare, che, lavora per la dissolvenza, ma anima solo l'ultimo elemento della matrice.

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

}

Sono sicuro che la sua semplice.

Grazie

È stato utile?

Soluzione

Prima di tutto si dovrebbe davvero prendere in considerazione una migliore convenzione di denominazione. Chiamata di un UILabel un feed non è molto utile per il futuro, quando si deve tornare e un'occhiata al tuo codice. Vorrei chiamarlo feedLabel . Poi, quando si scorrere attraverso la vostra lista di feed, si può solo for (NSString *feed in feeds) e avrà più senso. E così sarà feedLabel.text = feed;.

In ogni caso, il problema che vedo con il codice è che state ripetutamente impostazione l'alfa a zero nel vostro ciclo, ma non avete mai riportarlo a uno. In altre parole, non stai facendo una modifica al valore alfa. Rimane lo stesso in ogni iterazione.

Così forse si potrebbe chiarire quello che stai cercando di fare. Se si desidera sfumare il testo tra i cambiamenti nel testo, avrete bisogno di un animazione e metodologia diversa. Invece di un ciclo, catena le animazioni in modo tale che quando il vostro didStopSelector, è possibile impostare il testo e iniziare quello successivo. Qualcosa di simile:

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

Altri suggerimenti

ho provato il codice, esso svanisce al primo avanzamento, ma non entra l'evento animationDidStop. ecco perché cant chiamare di nuovo performAnimation. c'è qualche set per l'animazione (delegato o protocollo, ecc ..)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top