我有一个淡入的方法,然后淡出一个按钮标签(如下所示):
-(void)fade:(NSString *)text
{
NSLog(@"Starting Fade In for symbol %@",text);
[self.symbolButton setAlpha:0.0f];
[self.symbolButton setTitle:text forState:UIControlStateNormal];
[UIView animateWithDuration:2 animations:^{
[self.symbolButton setAlpha:1.0f];
} completion:^(BOOL finished) {
NSLog(@"Starting Fade Out for symbol %@",text);
[UIView animateWithDuration:2 animations:^{
[self.symbolButton setAlpha:0.0f];
} completion:nil];
}];
}
这是按预期工作的。但是,我想循环遍历数组的内容而不是单个字符串(例如,淡入" A",淡出" A",淡入&# 34; B",淡出" B" .....)。
在上面的代码中,完成块在开始淡出(好)之前等待淡入完成。但是,如果我尝试使用for循环处理数组(修改接受数组的方法并在迭代数组的for循环中嵌套动作),则循环立即循环而不是等待第一个字符完成。
有没有办法在第二个动画动作中使用完成块来暂停循环的处理 - 或者我是以错误的方式解决这个问题?
答案 0 :(得分:0)
你可以试试这个。我没有测试它,但这个想法应该有效
NSArray<UIButton*>* arrButtons;
NSString* text;
for (int i = 0 ; i < arrButtons.count; i++) {
UIButton* b = arrButtons[i];
b.alpha = 0.0f;
[b setTitle:text forState:UIControlStateNormal];
[UIView animateKeyframesWithDuration:2 delay:4*i options:0 animations:^{
b.alpha = 1.0f;
} completion:^(BOOL finished) {
NSLog(@"Starting Fade Out for symbol %@",text);
[UIView animateWithDuration:2 animations:^{
b.alpha = 0.0f;
} completion:nil];
}];
}