iPhone поможет с анимацией cgaffinetransform resetting?


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

Это то, что я использую для создания анимации..
    [UIImageView animateWithDuration:1.5
                                   delay:0.0 
                                 options:(UIViewAnimationOptionAllowUserInteraction |
                                          UIViewAnimationOptionCurveLinear 
                                          )
                              animations:^(void){

                                  ufo.transform = CGAffineTransformTranslate(ufo.transform, -270, 100);

                              }
                              completion:^(BOOL finished){
                                  if(finished){
                                      NSLog(@"ufo finished");

                                      [self ufoAnimationDidStop];
                                  }
                              }];

Как я понимаю, CGAffineTransforms просто визуально делает спрайт похоже, что он двигается, но на самом деле не двигается. Поэтому, когда я пытаюсь "сбросить" позицию, используя

НЛО.center = CGPointMake (355, 70);

Он ничего не делает.

У меня действительно что-то работает, если я позвоню

НЛО.transform = CGAffineTransformTranslate (ufo.transform, 270, -100);

Он сбрасывается. Проблема в том, что если я выхожу из приложения на полпути через анимацию, то когда она перезапускается, она не обязательно начинается с самого начала, и она не идет правильное место, это в основном сходит с ума!

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

Спасибо

1 2

1 ответ:

Применение преобразования к виду фактически не изменяет центр или границы вида; оно просто изменяет способ отображения вида на экране. Вы хотите установить преобразование обратно в CGAffineTransformIdentity, чтобы оно выглядело как "нормальное."Вы можете установить его на это, прежде чем начать анимацию и установить его на то, что вы хотите, чтобы он анимировался.