2011-05-13 3 views
1

내 코드에서 약간의 걸림돌을 겪었습니다. 현재 개발자가 사용할 수있는 Apple Coverflow 대안 인 OpenFlow을 사용 중입니다. 데모에서는 모든 것이 훌륭하게 작동하는 것 같습니다. "흐름"은 UIView 애니메이션을 사용하여 애니메이션됩니다."암시 적"또는 자동 애니메이션을 사용하지 않도록 설정하는 방법

나는 iPad에서 작동하도록 데모를 수정했습니다. 어떤 점에서는보기가 암시 적으로 움직이는 것을 제외하고는 모든 것이 잘 작동합니다. 나는 이것이 왜 있는지를 알 수 없다. 암묵적인 애니메이션이 iOS에서 사용 가능하다고 생각조차하지 않았습니다.

저는 처음에 왜 이런 일이 일어나고 있는지, 그리고 어떻게 비활성화시킬 수 있는지에 대한 도움을 실제로 사용할 수있었습니다.

+0

[CALayer 암시 적 애니메이션을 비활성화하는 방법] 가능한 복제본 (영문) (http://stackoverflow.com/questions/5833488/how-to-disable-calayer-implicit-animations) – Warpling

답변

2

많은 두통과 많은 시간을 낭비했습니다. 나는 코드에서 무슨 일이 벌어지는 지 알았습니다. 암묵적인 애니메이션을 경험하고 있다고 생각했지만 갑자기 왜 이런 일이 시작되었는지 알 수 없었습니다.

나는 내재적 인 애니메이션을 더 잘 이해하려고 노력하기 때문에 통제 된 상황에서 어떻게 달성 할 것인지를 스스로 실험 해 보았습니다. 암시 적 애니메이션이 발생하지 않는 이유는 UIView 또는 해당 하위 클래스 중 하나를 항상 사용하기 때문입니다.

CALayer로 시작하여 엄격하게 레이어로 작업하면 많은 속성에 대한 모든 변경 사항이 암시 적으로 움직이는 것을 알게되었습니다.

UIView (및 그 후손)가 모두 자동으로 레이어가 백업되고 CALayer 속성이있는 것을 보면 혼란이있을 수 있습니다.

UIView가 CALayer 속성의 암시 적 애니메이션 메커니즘을 재정의하는 것이 분명합니다. 따라서 암시 적 애니메이션을 원한다면 CALayer를 직접 사용해야합니다. UIView가 동일한 동작을하는 CALayer 속성을 갖고 있기 때문에 CALayer의 속성을 직접 사용하지 않아야합니다.

내가 경험했던 버그는 ... 아마도 내가 만난 가장 이상한 것일 것입니다. 아무리 노력해도 모든 애니메이션 코드없이 값의 변화를 애니메이션으로 표현했습니다. 범인은 중첩 된 UIView 애니메이션 블록이되었습니다.

주의 사항은 다음과 바로 해제 문제를 잡을 경우 참조 :

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:1.2]; 
//animate something 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDelay:.8]; 
[UIView setAnimationDuration:.4]; 
//animate something else 
[UIView commitAnimations]; 

내가 다른 [UIView의 commitAnimations]와 중첩 된 블록을 종료하는 데 실패했습니다. 그것은 내 프로그램에서 말 그대로 애니메이션을 유출했다. 모든 것이 완전히 다른 클래스의 코드인데도 애니메이션이 적용되었습니다. 이 버그는 다음에 계속 부숴졌습니다!

관련 문제