iPhone помогите с анимацией CGAffineTransform сброс? - PullRequest
2 голосов
/ 23 ноября 2010

Привет, я полностью запутался с анимацией 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 просто визуально делает спрайт похожим на перемещенный, но фактически не перемещает его. Поэтому, когда я пытаюсь «сбросить» позицию, используя

ufo.center = CGPointMake (355, 70);

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

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

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

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

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

Спасибо

1 Ответ

4 голосов
/ 23 ноября 2010

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

...