2014-07-07 4 views
1

질문 모듈에서 사용자가 tableview로 표시되는 답변을 클릭 할 때 UIView의 크기를 조절하고 애니메이션을 적용해야합니다. 나는 몇몇 관련 질문을 읽고 그들의 해결책을 적용했다 그러나 그들 중 누구도 나를 위해 일하지 않았다.크기가 조정되는 동안 애니메이션이 예상대로 작동하지 않습니다.

처음보기에는 uiview가 표시되지 않지만 사용자가 동일한 답변을 2 회 이상 클릭하면 동일한 답변의 두 번째 클릭으로 프레임이 변경되지 않기 때문에 나타납니다.

기본적으로 답변 변경의 피드백, uiview의 높이를 다시 계산하면 애니메이션을 차단하고있는 것 같습니다.

내 뷰 계층 : 뷰와 텍스트 뷰의 제약을 변경 http://i.imgur.com/Oho6Hob.png

방법 :

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 매개 변수는 계산 된 높이입니다. 관련 라벨 또는 텍스트 뷰

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

정말 도움이 될만한 정보가 여기 있습니다. 감사합니다.

+0

계산 된 위치와보기의 크기가 로그에서 올바르게 보입니다. –

+0

애니메이션 내부에 새 프레임의 계산을 설정해보십시오. 따라서 layoutIfNeeded를 호출하지 않고 – Jasper

+0

이 제안을 시도했지만 불행히도 그 중 하나도 작동하지 않았습니다. @ 재스퍼 폴 –

답변

2

1 주일을 보낸 후에 아무 것도하지 않는 제약 조건을 추가했습니다. 이유는 모르겠지만 애니메이션 차단 기능을 해결했으며 layoutIfNeeded를 삭제하더라도 완벽하게 작동했습니다.

관련 문제