Frage

Ich werde mit einer Reihe von RSS-Feeds, um am Ende, und möchte ein Etikett oder so, um sie am unteren Rande der Ansicht angezeigt werden soll. Ich mag belebte durch jeden Feed in dem Array.

Dies ist, was ich bisher zu belebtem habe, die für die Fade funktionieren, aber beseelt nur das letzte Element des Arrays.

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

}

Ich bin sicher, seine einfach.

Danke

War es hilfreich?

Lösung

Als erstes sollten Sie wirklich eine bessere Namenskonvention in Betracht ziehen. Anrufen einer UILabel a Feed ist für die Zukunft nicht sehr hilfreich, wenn Sie zurück und Blick auf den Code kommen. Ich würde nennen es feedLabel . Dann, wenn Sie Iterierte durch die Liste der Feeds können Sie nur for (NSString *feed in feeds) und es wird mehr Sinn machen. Und so wird feedLabel.text = feed;.

Wie auch immer, das Problem, das ich mit Ihrem Code zu sehen ist, dass Ihre immer wieder die Alpha auf Null in der Schleife setzen, aber Sie es nie zu einer zurückwerfen. Mit anderen Worten, sie machst keine Änderung an den Alpha-Wert. Es bleibt gleich in jeder Iteration.

Vielleicht könnten Sie klären, was Sie zu tun versuchen. Wenn Sie den Text zwischen den Änderungen im Text verblassen möchten, müssen Sie eine andere Animation und Methodik. Statt einer Schleife, die Kette Ihre Animationen so dass, wenn Ihr didStopSelector, setzen Sie den Text und starten Sie die nächste. So etwas wie:

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

Andere Tipps

Ich habe versucht, den Code, es blendet auf erste Feed, aber es nicht das animationDidStop Ereignis ein. warum das ist, es kann nicht performAnimation wieder aufrufen. Gibt es einen Satz für Animation (Delegierter oder Protokoll etc ..)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top