2016-07-10 5 views
-2

버튼을 누를 때 UIView의 하위 클래스를 움직여 간단한 애니메이션을 시도하고 있습니다. 버튼을 누르면 뷰가 xx 단위를 원래 위치에서 멀리 떨어 뜨리면 xx 단위만큼 떨어진 후 원래 위치로 되돌아가는 것이 문제입니다. 새로운 위치에서 멈추고 싶습니다. 내 코드에서 뭐가 잘못 되었나요?iOS의 애니메이션 버그

[UIView animateWithDuration:0.5f animations:^{ 
    self.analogStick.frame = CGRectOffset(self.analogStick.frame, 0, -10); 
}]; 
+1

자동 레이아웃 제약 조건이 정의되어있는 뷰에 애니메이션을 적용하는 것이 문제입니다. 이것을 애니메이트하려면 맨 위의 컨 스트레인 트를위한 콘센트를 추가하고, 'constant' 속성을 변경 한 다음,'layoutIfNeeded'에 대한 호출을 애니메이트해야합니다. http://stackoverflow.com/a/28329399/1271826을 참조하십시오. – Rob

+0

@Rob 처음으로 뷰를로드 할 때 애니메이션이 나타나면 뷰가로드 된 후에도 작동한다는 것을 설명합니까? 버튼을 누를 때마다 위치가 동적으로 업데이트됩니까? –

+1

예, 버튼을 탭하면 상단 구속의 상수를 조정 한 다음 호출을 'layoutIfNeeded'에 애니메이션으로 나타냅니다. – Rob

답변

1

인터페이스 제약 조건의 IBOutlets로 레이아웃 제약 조건을 코드에 연결하십시오. 그런 다음 블록 시작 부분에서 제약 조건 상수를 원하는 값으로 설정합니다. 수퍼 뷰로 왼쪽 제약 조건을 its constant - 10으로 설정합니다.

그런 다음 애니메이션 블록 코드 내에서 [self layoutIfNeeded]을 호출하면됩니다. 을하지 마십시오.은 제약 조건을 사용할 때 어떤 방식 으로든 프레임을 설정합니다 (사용자가 수행하는 작업이 정확히 인 경우에만 을 알지 못한다면 3D 변형을 사용할 수는 있지만 개인적으로 권장하지는 않습니다).