2016-10-04 2 views
0

시작하는 UILabel은 뷰에서 수직 및 수평 가운데에 배치되어 맨 위에서 40 포인트가되도록 애니메이션을 적용하려고합니다.애니메이션 중심 수직 구속이 상단에서 고정

이것이 여러 장치/화면 크기에 있기 때문에 항목이 반드시 정확한 위치에 있어야 할 필요는 없으며 마찬가지로 상단 제한을 사용할 수 있다고 생각하지 않습니다. 모든 장치 높이에서 사용할 수있는 '일정한'값 사용

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 나는 두 개의 구속 조건, 즉 수직 중심에 대해 1을 시작한 다음 애니메이션 끝에서 맨 위 위치에 대해 1을 선택한 다음 애니메이션에서이를 바꿔 놓는 것이 더 낫지 않습니까?

지금까지 난 그냥 내 centerY 제약에 대해 함께 IBOutlet을하고 난과 같이 재정의하려고 :

labelYConstraint = NSLayoutConstraint.init(item: titleLabel, attribute:NSLayoutAttribute.centerY , relatedBy: .equal, toItem: view, attribute: NSLayoutAttribute.top, multiplier: 0, constant: 40) 

    UIView.animate(withDuration: 2.0) { 
     self.view.layoutIfNeeded() 
    } 

누구나 비슷한 달성하기 위해 관리?

+0

충돌은 무엇을 말하는가? – Connor

+0

크래시가 깨끗한 상태에서 사라진 것처럼 보이지만 사실상 labelYConstraint를 중심에서 위로 위의 값으로 변경하면 애니메이션이 없습니다. – TommyBs

+0

새 값으로 설정하기 전에'labelYConstraint.active = false'를 설정하면 이전 제약 조건 비활성화합니다. – Connor

답변

0

먼저 이전에 설정 한 제약 조건을 비활성화해야합니다

labelYConstraint.active = false 
labelYConstraint = NSLayoutConstraint.init(item: titleLabel, attribute:NSLayoutAttribute.centerY , relatedBy: .equal, toItem: view, attribute: NSLayoutAttribute.top, multiplier: 0, constant: 40) 
view.addConstraint(labelYConstraint)