2016-09-13 5 views
3

문제가 있습니다. UITextFieldUILabel 중 하나를 그룹으로 묶는 매우 간단한 사용자 설정 UIView이 있습니다.UIView - 지속 시간을 애니메이션하면 지속 시간이 무시되는 것 같습니다.

UILabelUITextField에, 나는 사용자가 UITextField을 편집하기 시작하면 UILabel가 40px까지가는 것을 원한다.

제약 조건을 사용하여 텍스트 필드의 프레임과 레이블의 프레임을 설정하고 있습니다.

그래서 난 그냥 UITextFieldDelegate 프로토콜 내 사용자 정의보기에서 대리자를 설정하고 대리자 메서드를 구현합니다 textFieldDidBeginEditing, 짖는 소리 :

난 그냥 대리인이 내 레이블의 제약 (중앙 Y)를 애니메이션 해요를 방법. 어떻게됩니까

func textFieldDidBeginEditing(textField: UITextField) { 
    self.centerVerticallyLabelConstraint.constant = -40 
    UIView.animateWithDuration(0.5) { 
     self.textFieldLabel.layoutIfNeeded() 
    } 
} 

UILabel가 제대로가는 것입니다,하지만 바로 올라갑니다. 내 애니메이션에서 0.5의 기간을 무시합니다. 내가 같은 시간에 다른 뭔가를 애니메이션 아니에요

Show problem image

, 나는 단지이 애니메이션이 : 난 이유를 모르겠어. UIView.의 애니메이션을 비활성화하지 않았습니다. 대리자가 UITextfield으로 설정되었습니다.

아이디어가 있으십니까?

답변

7

textview 대신 layoutIfNeeded를 호출 해보십시오.

UIView.animateWithDuration(0.5) { 
    self.view.layoutIfNeeded() 
} 

희망이 있습니다. 실행 코드 아래

+0

주셔서 감사합니다 ... 내가 전에이 표시되지 가지고 화가 해요! – AnthonyR

0

보십시오 :

func textFieldDidBeginEditing(textField: UITextField) { 
    UIView.animateWithDuration(0.5) { 
     self.textFieldLabel.frame.origin.y -= 40 
    } 
} 
+1

이것은 바람직하지 않을 수있는 자동 레이아웃 제한을 깨뜨릴 것입니다. 제약 조건을 애니메이션화하는 것은 유효한 일입니다. – Losiowaty

0

필요가 self.view.layoutIfNeeded()를 호출하지 self.textFieldLabel.layoutIfNeeded() 감사