Последовательность аффинного преобразования с помощью Quartz 2D - PullRequest
4 голосов
/ 24 декабря 2011

Я пытаюсь смоделировать некорректную анимацию ввода пароля в OS X с помощью UIAlertView в iOS.По сути, я хочу перевести предупреждение влево, а затем перевести вправо.Вот что я делаю:

    [UIView animateWithDuration:0.5 
                 animations:^{
                     alertView.transform = CGAffineTransformTranslate(CGAffineTransformIdentity, 200, 0);
                     alertView.transform = CGAffineTransformTranslate(CGAffineTransformIdentity, -200, 0);
                 }];

Однако это не дает желаемого эффекта.Оповещение мгновенно смещается вправо, а затем плавно переводится влево.Как сделать так, чтобы оба перевода происходили плавно после друг друга?

1 Ответ

8 голосов
/ 24 декабря 2011

Попробуйте это:

[UIView animateWithDuration:0.5 animations:^{

        alertView.transform = CGAffineTransformTranslate(CGAffineTransformIdentity, 200, 0);

    } completion:^(BOOL finished) {

        [UIView animateWithDuration:0.5 animations:^{
            alertView.transform = CGAffineTransformTranslate(CGAffineTransformIdentity, -200, 0);
        }];
    }];

Но я бы сделал анимацию так:

[UIView animateWithDuration:0.1 animations:^{

        alertView.transform = CGAffineTransformTranslate(CGAffineTransformIdentity, 20, 0);

    } completion:^(BOOL finished) {

        [UIView animateWithDuration:0.1 animations:^{

            alertView.transform = CGAffineTransformTranslate(CGAffineTransformIdentity, -20, 0);

        } completion:^(BOOL finished) {

            [UIView animateWithDuration:0.1 animations:^{
                alertView.transform = CGAffineTransformTranslate(CGAffineTransformIdentity, 0, 0);
            }];

        }];
    }];

до вас! ; -)

...