2013-03-28 4 views
2

Так что мне нужно было создать простую анимацию, где вид вылетает с экрана, а затем снова возвращается обратно на основе жестов пользователя. Мой код анимации (ниже) работает очень хорошо. На самом деле это работает слишком хорошо. Обратите внимание, как в методе enterStage я не изменяю вид. Я просто установил его шкалу в 1. Вид влетает и заканчивается в исходном положении. Если я делаю CGAffineTransformMakeTranslation и не делаю масштаб, он также отлично работает. Я ожидал, что мне нужно будет следить за оригинальным размером и позицией, но похоже, что это было несколько запутанно для меня.UIView animateWithDuration возвращается в исходное состояние

Это загадочно.

Где хранятся данные о первоначальном размере и местоположении? Как я могу отключить это поведение, если захочу - как если бы я хотел, чтобы представление не запоминало его первоначальную позицию?

-(void) exitStage{ 

    [UIView animateWithDuration:0.5 
          delay:0 
         options:UIViewAnimationOptionBeginFromCurrentState 
        animations:(void (^)(void)) ^{ 
         CGAffineTransform t = CGAffineTransformMakeTranslation(0, -1000); 
         self.transform = CGAffineTransformScale (t, 10.0, 10.0); 
        } 
        completion:^(BOOL finished){ 
        }]; 
} 

-(void) enterStage{ 

    [UIView animateWithDuration:0.5 
          delay:0 
         options:UIViewAnimationOptionBeginFromCurrentState 
        animations:(void (^)(void)) ^{ 
         //self.transform = CGAffineTransformMakeTranslation(0, self.originalYcoord); 
         self.transform = CGAffineTransformMakeScale(1,1); 
        } 
        completion:^(BOOL finished){ 
        }]; 
} 

ответ

3

В ваших из перехода установить его перевод, чтобы перейти к (10,10), но в вашем переходе входа, вы установили ее преобразование быть 1x1 масштабного преобразования, который не содержит перевода вообще, таким образом, просто открутив ваш перевод просто стереть его

Если вы хотите сохранить первоначальную трансформацию и вносить изменения в ней вам нужно будет сделать что-то вроде

self.transform = CGAffineTransformScale(self.transform, 1, 1); 
//or 
self.transform = CGAffineTransformTranslate(self.transform, 10, 10); 
+1

+1, да, это одно. – 2013-03-28 15:42:10

+0

... но затем, где хранится информация? Рамка UIView остается неизменной и не изменена ли она преобразованием? Я этого не проверял. – NFG

+0

Информация хранится в свойстве transform, когда ОС идет, чтобы нарисовать объект, он применяет преобразование к тому, что ему нужно для рисования –

Смежные вопросы