我有10 UILabels
,也许有UIImageViews
。我希望在1 UIView
中以平滑的FadeOut&显示所有这些内容。 FadeIn过渡,一个接一个。
我知道在for循环中放置UIView
动画不起作用,因为动画是异步和异步的。不会产生适当的效果。所以我通常这样做的方法是将UIView
动画链接在一起。即在一个元素动画完成后开始下一个。对于3-4个元素,代码看起来没问题。像这样 -
[UIView animateWithDuration:0.25
delay:0
options:UIViewAnimationCurveEaseInOut
animations:^{ //do something with alpha here - first element }
completion:^(BOOL finished){
[UIView animateWithDuration:0.25
delay:0
options:UIViewAnimationCurveEaseInOut
animations:^{ //do something with alpha here - 2nd element}
completion:^(BOOL finished){ ... }
}
但对于10多个元素,它变得非常混乱。怎么会这样做呢?基本上我正在创建一个带有循环内容的UIView
,就像一个小部件。
答案 0 :(得分:6)
使用NSTimer
而不是循环进行编辑。
counter
是标题中定义的ivar。
- (void)viewDidLoad
{
[super viewDidLoad];
counter = 0;
[NSTimer scheduledTimerWithTimeInterval:0.30
target:self
selector:@selector(timerTick:)
userInfo:nil
repeats:YES];
}
- (void) timerTick:(NSTimer *)timer{
UIView *currentView = [self.view.subviews objectAtIndex:counter];
[UIView animateWithDuration:0.25
delay:0
options:UIViewAnimationCurveEaseInOut
animations:^{ currentView.alpha = 1.0;}
completion:^(BOOL finished){
[UIView animateWithDuration:0.25 animations:^{currentView.alpha = 0.0;}];
}
];
counter++;
if (counter >= [self.view.subviews count]) {
counter = 0;
}
}