Последовательная анимация с использованием вложенных блоков анимации - PullRequest
0 голосов
/ 25 апреля 2011

Я ищу способ реализации последовательных анимаций с использованием вложенных блоков анимации.

Несколько сложнее, когда происходит внутри UIScrollView размером с три UIImageViews (там много изображений, и когда я прокручиваю ихЯ постоянно обмениваю изображения в UIImageViews.

Когда свиток закончен, я хочу переключить изображение в (видимом) среднем UIImageView, три раза, а затем вернуться к исходному виду.Я пытаюсь сделать это следующим образом:

- (void) doAnimation {
    // get the animation frames, along with the current image
    NSString *swap1 = @"first.png";
    NSString *swap2 = @"second.png";
    UIImage *original = currentPage.image;

    UIViewAnimationOptions myOptions = UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionAllowUserInteraction;
    [UIView animateWithDuration:2.0 delay:2.0 options:myOptions
            animations:^{ [currentPage setImage:[UIImage imageNamed:swap1]]; }
            completion:^(BOOL finished) {
                [UIView animateWithDuration:2.0 delay:2.0 options:myOptions
                        animations:^{ [currentPage setImage:[UIImage imageNamed:swap2]]; }
                        completion:^(BOOL finished) {
                            [UIView animateWithDuration:2.0 delay:2.0 options:myOptions
                                    animations:^{ [currentPage setImage:[UIImage imageNamed:swap1]]; }
                                    completion:^(BOOL finished) {
                                        [currentPage setImage:original]; }]; }]; }];
}

Когда я запускаю это, нет ни длительности, ни задержки, все это происходит одновременно, почти слишком быстро, чтобы глаз мог видеть.Может ли это быть потому, что «currentPage» является UIImageView?(Похоже на этот вопрос ?)

Ответы [ 2 ]

1 голос
/ 14 сентября 2011

Нет задержки, потому что UIImageView.image не является анимируемым свойством.Таким образом, механизм анимации UIView не будет настраивать анимацию и просто немедленно вызовет ваш блок завершения.

Какую анимацию вы ожидали?Вы можете прикрепить объект CATransition к нижележащему слою, чтобы получить простое постепенное затухание. Просто используйте [imageView.layer addAnimation:[CATransition animation] forKey:nil], чтобы получить перекрестное затухание со значениями по умолчанию (вы можете настроить синхронизацию, изменив свойства CATransition, прежде чем присоединять его кслой).Чтобы добиться последующей анимации, вы можете либо использовать свойство delegate CAAnimation (суперкласс CATransition), чтобы узнать, когда это будет сделано, и запустить второй, либо вы можете просто использовать -performSelector:withObject:afterDelay:, чтобы начать следующийшаг анимации после заданной пользователем задержки.Метод делегата будет более точным в отношении времени, но метод executeSelector немного проще в написании.К сожалению, CAAnimation не поддерживает блок завершения.

0 голосов
/ 19 апреля 2012

Другой подход для перехода от одного вида изображения к другому - использование функции блочной анимации transitionFromView: toView: duration: options: завершение , как обсуждалось в « Создание анимированных переходов между представлениями».Вы бы сделали это вместо animateWithDuration, чтобы изменить изображения.

...