Вопрос

Я собираюсь в конечном итоге с массивом 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];

}

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

Спасибо

Это было полезно?

Решение

Во-первых, вы должны действительно рассмотреть лучшую конвенцию именования. Называя UILabel A подача Не очень полезен для будущего, когда вы должны вернуться и посмотреть на ваш код. Я бы назвал это 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];
  }
}

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top