UIView анимации в цикле - PullRequest
       29

UIView анимации в цикле

1 голос
/ 01 июня 2011

Есть ли причина, по которой анимация не работает в цикле?Я знаю, что вы можете выполнить команду:

[UIView setAnimationRepeatCount: someNumber];

, которая работала нормально, пока я не установил фактические PDF-файлы для загрузки.Поэтому раньше, когда загружался только один файл PDF, когда я делал анимацию, скажем, 5 раз, чтобы перейти к последнему документу, анимация выглядела бы правильно.Но теперь, когда у меня есть 5 различных PDF-файлов, он будет переворачивать страницу 5 раз с помощью CurlUp, но он будет продолжать показывать 1-й PDF-файл в списке, а затем в конце загрузить нужный.Поэтому я подумал, что могу сделать это в цикле, отслеживая местоположение в массиве, и загружать каждый PDF-файл в каждом месте, когда я пролистываю страницы, чтобы дать пользователю ощущение того, где они находятся в стопке PDF-файлов.Но когда я помещаю основной анимационный код в цикл, он в основном показывает анимацию один раз, но попадает в правильный документ.

1 Ответ

5 голосов
/ 01 июня 2011

Из моего понимания того, что вы делаете, похоже, что вы фактически запускаете все 5 анимаций одновременно.Когда вы выполняете анимационный блок в цикле for, цикл выполнения не выполняет итерацию между каждым циклом, и запускается только последняя анимация.

Вам нужно будет использовать вызовы завершения и «цепочку»их вместе.Итак, вы запускаете первую анимацию, затем при этом вызове завершения вы выполняете второй, затем об этом вызове третий и т. Д. Гораздо более длинный код, но это будет работать.

Было бы проще использовать блоки вВ этом сценарии весь код анимации будет находиться в одном месте, вместо того, чтобы распределять его по нескольким методам для каждой анимации.Вы просто вложите блоки, в первом блоке завершения анимации вы создадите второй, затем третий и т. Д.

Вот пример использования метода блоков.Это немного сложно читать, но вы поймете идею.Возможно, вам удастся создать отдельный анимационный блок и повторно использовать его в каждом методе завершения, но я не знаю всех преимуществ, которые можно сделать, и это гораздо легче прочитать, когда вы впервые пытаетесь понять его.

Обратите внимание, что я на самом деле не пробовал и не проверял это, но я думаю, что он будет делать то, что вы хотите.

    [UIView animateWithDuration:1.0 animations:^(void) {
        // Animation changes go here
        // blah.alpha = 1.0
        // blah.position = CGPointMake
        // etc
    } completion:^(BOOL finished) {
        // Start next animation which will run with this one finishes
        [UIView animateWithDuration:1.0 animations:^(void) {
            // Animation changes go here
            // blah.alpha = 1.0
            // blah.position = CGPointMake
            // etc
        } completion:^(BOOL finished) {
            // Start next animation which will run with this one finishes
            [UIView animateWithDuration:1.0 animations:^(void) {
                // Animation changes go here
                // blah.alpha = 1.0
                // blah.position = CGPointMake
                // etc
            } completion:^(BOOL finished) {
                // Start next animation which will run with this one finishes
                [UIView animateWithDuration:1.0 animations:^(void) {
                    // Animation changes go here
                    // blah.alpha = 1.0
                    // blah.position = CGPointMake
                    // etc
                } completion:nil];
            }];
        }];
    }];
...