我将最终获得一系列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];
}
我确定它很简单。
由于
答案 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。是否有任何动画集(委托或协议等)。