CGAffineTransformMakeTranslation: как применить две анимации одновременно - PullRequest
1 голос
/ 13 октября 2011

У меня есть представление, которое я хотел бы преобразовать двумя способами. Сначала я хотел бы переместить его по оси Y. Затем я хотел бы увеличить его.

Однако, когда я использую следующий код, объект сначала перемещается, а затем возвращается в исходное положение при увеличении.

Есть ли способ применить два преобразования одновременно, не отменяя первое?

Извините, если это просто, но любая помощь будет очень признательна!

   [UIView animateWithDuration:animationDuration
                      delay:0
                    options:UIViewAnimationOptionCurveEaseIn
                 animations:^{

                 currentCover.transform = CGAffineTransformMakeTranslation(0, 0-keyboardTop+35);


                 }
                 completion:^(BOOL finished) {


                 [UIView animateWithDuration:animationDuration
                      delay:0
                    options:UIViewAnimationOptionCurveEaseIn
                 animations:^{ 

                 [currentCover setTransform:CGAffineTransformMakeScale (1.3, 1.3)];


                 }
                 completion:^(BOOL finished) { }
 ];



                 }
 ];

Ответы [ 3 ]

1 голос
/ 20 февраля 2012

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

Документация из CGAffineTransformMakeTranslation читает "это создает новую матрицу перевода из значений x и y, которые определяют, какмного, чтобы переместить происхождение. "Я не думаю, что это применяет фактическое преобразование.

Я думаю, что вы бы предпочли применить перевод, позвонив по номеру CGAffineTransformTranslate().По крайней мере, у меня это работает !!

1 голос
/ 08 февраля 2015

Здесь мы создаем два изменения (CGAffineTransform), которые вы хотите сделать вместе, и применяем преобразование к представлению.

       CGAffineTransform translate = CGAffineTransformMakeTranslation(0, 0-keyboardTop+35);
        CGAffineTransform scale = CGAffineTransformMakeScale(1.3, 1.3);
        CGAffineTransform transform =  CGAffineTransformConcat(translate, scale);

    [UIView animateWithDuration: animationDuration
                              delay:0.0
                            options:UIViewAnimationOptionCurveEaseIn
                         animations:^{
                             currentCover.transform = transform;
                         }completion:^(BOOL finished){
      }];
1 голос
/ 14 октября 2011

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

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