Анимация не работает должным образом при изменении размера UIView

#ios #objective-c #cocoa-touch #uiview #uianimation

#iOS #цель-c #cocoa-touch #uiview #упрощение

Вопрос:

В нашем модуле вопросов мне нужно изменить размер и анимировать UIView, когда пользователь нажимает ответы, которые представлены в tableview. Я прочитал некоторые связанные вопросы и применил их решение, но ни один из них не сработал для меня.

Проблема в том, что uiview не отображается при первом нажатии, но если пользователь нажимает на одни и те же ответы 2 или более раз, это появляется, потому что при повторном нажатии на одни и те же ответы фрейм не меняется.

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

моя иерархия представлений:http://i.imgur.com/Oho6Hob.png

метод, который изменяет ограничения views и textview:

 self.feedbackLabelWrapperHeight.constant = height   45;
self.feedbackViewHeight.constant = height   45   12;
int y = height;

[self.feedbackView setFrame:CGRectMake(50,self.scrollView.frame.size.height   self.scrollView.frame.origin.y -(y 40),self.feedbackView.frame.size.width,(y 40))];
  

способ анимации:

 [UIView beginAnimations:@"feedback" context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.2];
[UIView setAnimationDelay:delay];
[self.view layoutIfNeeded];
[UIView commitAnimations];
self.isFeedbackViewVisiable = YES;
  

Я вызываю эти два метода в методе didSelectRowAtIndexPath в следующем порядке:
а параметр labelHeightOfResponse — это вычисленная высота связанной метки или textview

 [self setFeedbackConstraintHeight:labelHeightOfResponse];
[self feedbackViewAppearAnimationWithDelay:0.2 yPosition:labelHeightOfResponse];
  

Я был бы действительно признателен за помощь здесь.
Спасибо!

Комментарии:

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

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

3. просто попробовал ваше предложение, но, к сожалению, оно тоже не сработало. @JasperPol

Ответ №1:

потратив неделю, я добавил ограничение, которое ничего не делает. Я не знаю почему, но это решило блокировку анимации, более того, она работала отлично, даже если я удалил layoutIfNeeded.