2014-09-10 2 views
17

В настоящее время я тестирую свои приложения для выпуска IOS 8. Я заметил, что после того, как я выполнил блок анимации, анимация сбрасывается, если я обновляю текст любой метки. Я провел простой пример с помощью одного метода, показанного ниже. Выполнение этого примера приводит к следующему:Анимационные блоки сбрасываются в исходное положение после обновления текста

  • Нажав myButton, первая анимация выполняется, но сбрасывается при изменении текста метки.
  • Нажав myButton второй раз - анимация запускается, но не возвращается в исходное положение.

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

Я хотел бы исправить это, чтобы при запуске метода текст метки мог быть обновлен без сброса анимации.

- (IBAction)move:(id)sender { 

[UIView animateWithDuration:0.4 delay:0.0 
       options:UIViewAnimationOptionBeginFromCurrentState 
       animations:^{ 
        self.myButton.center = CGPointMake(200, 300); 
       }completion:^(BOOL finished){ 

        if(finished){ 
         [email protected]"moved"; 
        } 

       }]; 
} 
+0

такая же проблема здесь, у кого есть решение для этого? –

ответ

16

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

Изменение текста ярлыка после запуска анимации запускает обновление макета, и iOS перемещает все вокруг, чтобы соответствовать исходным ограничениям вида. (Я подозреваю, что это поведенческое изменение от iOS7).

Быстрое исправление: Отменить автоматическую компоновку в представлении, и это должно работать должным образом.

+0

Это работа. Даже я не использую установленное ограничение –

1

Попробуйте это. Добавьте желаемую анимацию в финишный блок.

- (IBAction)move:(id)sender { 

    [UIView animateWithDuration:0.4 delay:0.0 
        options:UIViewAnimationOptionBeginFromCurrentState 
        animations:^{ 


self.myButton.center = CGPointMake(200, 300); 
       }completion:^(BOOL finished){ 



     if(finished){ 
         [email protected]"moved"; 
self.myButton.center = CGPointMake(200, 300); 
        } 

       }]; 
} 
+0

Я вижу, что вид мерцает, если я это сделаю. :/ не удовлетворительно. – fatuhoku

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