Анимация Блоки сбрасываются в исходное положение после обновления текста
В настоящее время я тестирую свои приложения для выпуска 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";
}
}];
}
Ответы
Ответ 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);
}
}];
}