Анимация UILabel Fade In / Out - PullRequest
       36

Анимация UILabel Fade In / Out

0 голосов
/ 09 августа 2010

Я собираюсь получить массив RSS-каналов и хотел бы, чтобы метка или что-то подобное отображало их внизу представления.Я хотел бы анимировать каждый канал в массиве.

Это то, что я до сих пор анимировал, которое работает для затухания, но анимирует только последний элемент массива.

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

}

Я уверен, что это просто.

Спасибо

Ответы [ 2 ]

7 голосов
/ 15 августа 2010

Во-первых, вы должны действительно подумать о лучшем соглашении об именах.Вызов UILabel feed не очень поможет в будущем, когда вам придется вернуться и посмотреть на свой код.Я бы назвал это feedLabel .Затем, когда вы перебираете свой список каналов, вы можете просто for (NSString *feed in feeds), и это будет иметь больше смысла.И так будет feedLabel.text = feed;.

В любом случае, проблема, которую я вижу с вашим кодом, заключается в том, что вы постоянно устанавливаете альфа в ноль в цикле, но вы никогда не устанавливаете его обратно в единицу.Другими словами, вы не вносите изменения в альфа-значение.Он остается неизменным в каждой итерации.

Так что, возможно, вы могли бы уточнить, что вы пытаетесь сделать.Если вы хотите постепенно менять текст между изменениями в тексте, вам понадобится другая анимация и методология.Вместо цикла, цепочка ваших анимаций так, что, когда ваш didStopSelector, вы устанавливаете текст и начинаете следующий.Что-то вроде:

- (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];
  }
}
0 голосов
/ 01 сентября 2010

Я попробовал ваш код, он исчезает при первом фиде, но не входит в событие animationDidStop. вот почему он не может снова вызвать executeAnimation. есть ли набор для анимации (делегат или протокол и т. д.)

...