У меня есть массив UILabels, который я хочу оживить по экрану. Я итерация, хотя массив с использованием для петли, как показано ниже:Как я могу анимировать UILabels из массива, чтобы перемещаться по экрану с одинаковой задержкой между ними?
for(int i=0; i<[self.onScreenLabels count]; i++)
{
UILabel *label = self.onScreenLabels[i];
int x = label.frame.origin.x;
int y = label.frame.origin.y;
label.center=CGPointMake(320, 0);
[self.view addSubview:label];
[UIView animateWithDuration:0.3 delay:1.0 options:0 animations:^{
label.center=CGPointMake(x, y);
} completion:^(BOOL finished){
}];
}
Хочу каждый UILabel задержать 1.0 секунды после того, как последний перед анимации, например, подождать 1 секунду, пожарить первым, подождать 1 секунду стрелять вторым, подождать 1 секунду огонь третий .... и т. д. до конца массива. Однако, используя этот код, существует 1 секунда задержки, но ВСЕ метки затем ожидают в одно и то же время. Почему это? Есть ли способ обойти это?
благодаря
Я действительно пробовал что-то вроде этого раньше, но это не сработало, и задержка между ними просто стала больше и больше. Я попробовал это снова, хотя и поставил i ++ INSIDE в блок (я должен быть слабым блоком var __block int i), и это устранило проблему! Теперь имеет смысл. Спасибо!!!!!! – Kex
Почему, хотя все анимации создаются одновременно в цикле? – Kex
Вам не нужно «i ++» внутри блока. 'animateWithDuration:' немедленно возвращается, он не блокирует вызывающего абонента до тех пор, пока анимация не завершится, поэтому все итерации цикла будут выполняться одновременно. – Wain