Анимация массива UIViews - PullRequest
       20

Анимация массива UIViews

1 голос
/ 07 октября 2011

У меня есть массив UIViews, которые я анимирую с помощью следующего кода:

for (int i = 0; i<(int)viewArray.count; i++) {
    UIView *view = [viewArray objectAtIndex:i];
    CALayer *layer = view.layer;

    //animate the layer

}

Мой вопрос: есть ли способ задержать каждую анимацию, чтобы, например, она анимировала один UIView в массиве, а следующая анимация начиналась через 0,2 секунды или около того? Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

4 голосов
/ 07 октября 2011

Возможно, вы захотите попробовать следующее

float timeDelay = 0.2
float duration = YOUR_DURATION
for (int i = 0; i<(int)viewArray.count; i++) {
    UIView *view = [viewArray objectAtIndex:i];

    //animate the layer
    [UIView animateWithDuration:duration delay:(i+1)*timeDelay
            options: {Check UIView Class Reference on developer.apple.com}
            animations:^{
                   [view.layer fantastic animation here];
            } completion^(BOOL finised){
                   if(finished){
                     //Leave blank if nothing, good practice to implement debuging here or post  animation processes here (like removing a subview from a super)
                   }
            }];

}

Имейте в виду, что если вы отправите свою программу фону, это может нарушить вашу анимацию, поэтому убедитесь, что вы вызвали этот метод в вашем приложении. Делегаты:

- (void)applicationWillEnterForeground:(UIApplication *)application;

Надеюсь, это поможет

0 голосов
/ 07 октября 2011

Используйте этого парня:

+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion

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

...