动画UILabel淡入/淡出

时间:2010-08-09 09:53:24

标签: iphone uiview core-animation uiviewanimation

我将最终获得一系列RSS提要,并希望在视图底部显示标签或其他类似标签。我想为数组中的每个Feed设置动画。

这是我到目前为止动画制作的内容,它适用于淡入淡出,但只能动画数组的最后一项。

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 个答案:

答案 0 :(得分:7)

首先,您应该考虑更好的命名约定。当您必须返回并查看代码时,将UILabel称为提要对未来没有多大帮助。我会将其命名为 feedLabel 。然后,当您遍历您的Feed列表时,您可以for (NSString *feed in feeds),这将更有意义。 feedLabel.text = feed;也是如此。

无论如何,我在你的代码中看到的问题是你在循环中反复将alpha设置为零,但是你永远不会将它设置为1。换句话说,您没有对alpha值进行更改。它在每次迭代中都保持不变。

所以也许你可以澄清你想要做的事情。如果要在文本中的更改之间淡化文本,则需要使用不同的动画和方法。而不是循环,链接您的动画,以便当您的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];
  }
}

答案 1 :(得分:0)

我尝试了你的代码,它在第一个Feed中淡出,但它没有进入animationDidStop事件。这就是为什么它不能再次调用performAnimation。是否有任何动画集(委托或协议等)。