Подтвердить что ты не робот

Анимация Блоки сбрасываются в исходное положение после обновления текста

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

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

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

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

- (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";
                     }

                 }];
}
4b9b3361

Ответ 1

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

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

Быстрое исправление: снимите флажок "Автомакет" в представлении, и это должно работать как ожидалось.

Ответ 2

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

    - (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);
                     }

                 }];
}