2011-09-25 3 views
7

제 3 자 API가 애니메이션 블록 내부에서 호출하는 메소드가 있습니다. 그 방법에서는 몇 가지 하위 뷰를 작성해야합니다. 그러나이 경우 하위 뷰를 구성 할 때 애니메이션이 발생하지 않기를 바랍니다.UIView 애니메이션 블록에 중첩 된 코드의 애니메이션을 비활성화하는 방법은 무엇입니까?

"[UIView dontAnimateFromHere] ... [UIView nowYouMayAnimateAgain]"라고 말하는 방법이 있습니까?

답변

18

예, 그런 방법이 있습니다.

... 이렇게하면 이전 시작/종료 메소드를 사용하여 트리거 된 블록 및 애니메이션을 통해 트리거 된 UIView 애니메이션이 모두 비활성화됩니다.

그렇다면 제 3 자 라이브러리가 미리 컴파일 된 것으로 가정하고 있습니다. 그렇지 않으면 원본을 직접 수정할 수 있습니다. 물론 다른 방법으로 이상하고 움직이는 것이 가능하므로이 솔루션과 다를 수 있습니다. .

이렇게하면 애니메이션 블록에서 변경 한 내용이 비활성화되지 않습니다. 즉, 즉시 적용됩니다. 그렇지 않으면 써드 파티 API가 뷰가 사실이 아닐 수도 있다는 가정을하게 될 것이므로 나쁜 일이 일어날 위험이 있습니다.

3

iOS 7 이상에는 UIView의 +performWithoutAnimation:이 있습니다.

performWithoutAnimation은 애니메이션 블록 내에있는 동안 변경 사항을 즉시 실행하는 데 유용하지만 중첩 된 블록 내에서 만들어진 애니메이션 호출을 비활성화하지 않으므로 편리하게 사용하지만 setAnimationsEnabled만큼 강력하지는 않습니다. 원래의 대답.

관련 문제