У меня есть приложение с несколькими простыми анимациями, просто изображение, перемещающееся с экрана на экран, а затем обратно за экран. Я использую блоки анимации, а код выглядит так:
void (^animationOne) (void) = ^{imageOne.center = d;};
void (^afterOne) (BOOL) = ^(BOOL f) {imageOne.center = dOrig;};
[UIView animateWithDuration:.85 delay:3 options:opts animations:animationOne completion:afterOne];
Есть несколько других, которые более или менее придерживаются того же формата. Тем не менее, я бы хотел, чтобы они выглядели случайными. Частично проблема заключается в том, что и анимация, и блоки завершения специфичны друг для друга и являются обязательными, поэтому я не могу просто вставить анимацию в массив, перемешать ее, а затем использовать массив для анимации. Есть ли способ для меня, чтобы рандомизировать это, используя блоки анимации, и если нет, есть ли другой способ сделать это, чтобы я мог рандомизировать порядок? Спасибо.
Редактировать: Благодаря некоторым полезным советам от vikingosegundo, я изменил свой код, чтобы он выглядел так:
NSArray *animationsCompletions = [NSArray arrayWithObjects:
[NSDictionary dictionaryWithObjectsAndKeys:anim1,@"animation",after1, @"completion", nil],
[NSDictionary dictionaryWithObjectsAndKeys:anim2,@"animation",after2, @"completion", nil],
[NSDictionary dictionaryWithObjectsAndKeys:anim3,@"animation",after3, @"completion", nil],
[NSDictionary dictionaryWithObjectsAndKeys:anim4,@"animation",after4, @"completion", nil],
nil];
NSDictionary *animationCompletionPair = [animationsCompletions randomElement];
[UIView animateWithDuration:.85 delay:3 options:opts animations:[animationCompletionPair objectForKey:@"animation"] completion:[animationCompletionPair objectForKey:@"completion"]];
[UIView animateWithDuration:.85 delay:8 options:opts animations:[animationCompletionPair objectForKey:@"animation"] completion:[animationCompletionPair objectForKey:@"completion"]];
[UIView animateWithDuration:.85 delay:13 options:opts animations:[animationCompletionPair objectForKey:@"animation"] completion:[animationCompletionPair objectForKey:@"completion"]];
[UIView animateWithDuration:.85 delay:18 options:opts animations:[animationCompletionPair objectForKey:@"animation"]completion:[animationCompletionPair objectForKey:@"completion"]];
Однако теперь я получаю сигнал, полученный программой: ошибка EXC_BAD_ACCESS, когда попытка загрузить представление с анимацией, и компилятор не предоставляет никакой другой информации. Любые предложения будут оценены.