2013-01-31 2 views
0

iOS 애니메이션에서 스레드를 시작하지만 시작하기 전에 메인 UI 스레드가 완료 될 때까지 대기합니다. 애니메이션이 시작된 후 동일한 메인 스레드에서 아무 것도 할 수 있습니다. 시각.지연이있는 ios 애니메이션 시작

[UIView transitionFromView:currentVisible 
           toView:reuseablView 
           duration:0.6 
           options:(UIViewAnimationOptionTransitionCurlUp|UIViewAnimationOptionShowHideTransitionViews)    
          completion:^(BOOL finished) { 
           } 
          }]; 

[self callFunction1]; 

여기서 애니메이션은 아주 조금 지연되기 시작합니다. functioin1 호출을 기다리는 것 같습니다.

아무거나, 아이디어?

+0

... 지금은 영어로주세요. – holex

+0

일부 네트워크 작업에서이 메서드를 호출합니까? – agibson007

답변

0

[self callFunction1]으로 전화를 걸면 모든 애니메이션이 중단되거나 (이 경우 아직 시작되지 않음) 메인 스레드가 차단됩니다. 장기 실행 방법이라면 다른 스레드로 옮겨야합니다.

+0

하지만 애니메이션은 별도의 스레드에서 시작됩니다. 애니메이션이 시작되기 전에 메인 스레드는 자유롭습니까? –

+0

모든 드로잉은 메인 스레드에서 이루어지며 애니메이션 중에는 아무것도 실행하지 않아야합니다. –

+0

그래, 별도의 스레드에서 애니메이션을 시작하지만 UI 드로잉은 메인 스레드에서 수행되므로, 그 기간 동안 메인 스레드는 free.Otherwise 드로잉이 차단되어야한다. 맞다. 닐? –

0

애니메이션은 응용 프로그램이 액세스하는 것보다 더 높은 스레드에서 실제로 실행 되기는하지만 기본 스레드에서 시작되어야합니다. 따라서 코어 애니메이션 렌더링 서버의 작동 방식으로 인해 블로킹하는 동안 계속 수행 할 수 있습니다. 어떤 네트워크 코드에서 이것을 호출하지 않도록하십시오. 그것은 주 스레드에. 두 번째 메소드가 애니메이션을 차단하면 아마 진행되지만 차단되는 동안 app 및 touch 이벤트는 작동하지 않습니다. 두 번째 메서드가 충분히 오랫동안 블록하면 애니메이션의 지연으로 시간이 지나도 실행되지 않을 수 있습니다. 그러나 일단 시작되면 애니메이션은 다음 메소드 차단으로도 잘 돌아갑니다. 비록 당신이 메인 스레드를 차단하지 않는 것이 좋습니다. 애니메이션 후에 해당 메서드를 호출하려면 완료 블록에 있어야합니다.

마지막으로 이것을 증명하기 위해 먼저 애니메이션을 호출 한 다음 절전 모드를 호출 할 수 있습니다. 앱이 응답하지 않지만 애니메이션이 계속됩니다.

관련 문제