iphone последовательные анимации - PullRequest
2 голосов
/ 01 апреля 2011

Мне интересно, как лучше всего реализовать серию различных анимаций. Если я вызову следующий метод и попытаюсь, например, анимировать один и тот же объект вправо, влево и вверх, он не будет работать, потому что компилятор не работает с ними линейным образом, и я в конечном итоге получаю свой объект просто поднимаясь (пропуская шаги, чтобы идти направо и налево):

    -(IBAction)clickStart
{
    [self Animation1];
    [self Animation2];
    [self Animation3];

}

Теперь я могу это сделать, но мне это кажется неуклюжим и странным. Рассмотрим метод Анимации1:

[pageShadowView setFrame:CGRectMake(100, 0, CGRectGetWidth(pageShadowView.frame), CGRectGetHeight(pageShadowView.frame))];

        [UIView beginAnimations:@"Animation1" context:nil]; // Begin animation
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(Animation2)];

    [pageShadowView setFrame:CGRectMake(200, 0, CGRectGetWidth(pageShadowView.frame), CGRectGetHeight(pageShadowView.frame))];

    [UIView commitAnimations]; // End animations

И тогда я мог бы сделать то же самое в Animation2, то есть вызвать Animation3, как только это будет сделано. Но, честно говоря, это очень запутанный и не очень понятный метод кодирования. В любом случае, можно ли получить более «линейный» код, подобный тому, который я предлагал в начале (который не работает), или мне просто придется жить с методом выбора?

Спасибо за любые предложения!

Ответы [ 2 ]

10 голосов
/ 01 апреля 2011

Если вам не нужно поддерживать iOS <4: </p>

[UIView animateWithDuration:0.2 animations:^{
    // animation 1
} completion:^(BOOL finished){
    [UIView animateWithDuration:0.2 animations:^{
        // animation 2
    } completion^(BOOL finished){
        [UIView animateWithDuration:0.2 animations:^{
            // animation 3
        }];
    }];
}]
2 голосов
/ 28 июля 2011

Мы создали компонент для цепочки шагов анимации, декларативно используя блоки ( CPAnimationSequence на Github ).

Это дает вам очень читаемый код, что-то вроде этого:

[[CPAnimationSequence sequenceWithSteps:
    [CPAnimationStep           for:0.25 animate:^{ self.imageView.alpha = 0.0; }],
    [CPAnimationStep           for:0.25 animate:^{ self.headline.alpha = 0.0;  }],
    [CPAnimationStep           for:0.25 animate:^{ self.content.alpha = 0.0;   }],
    [CPAnimationStep after:1.0 for:0.25 animate:^{ self.headline.alpha = 1.0;  }],
    [CPAnimationStep           for:0.25 animate:^{ self.content.alpha = 1.0;   }],
    nil]
runAnimated:YES];

По сравнению с обычным блочным подходом (хорошо описанным Максом) он обладает тем преимуществом, что позволяет совмещать намерение и его представление: линейная последовательность шагов для анимации.Мы разработали эту тему в статье в нашем блоге по разработке для iOS .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...