#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.