2017-05-15 1 views
0
[UIView animateWithDuration:1 animations:^{ 
    self.animateView.frame = CGRectMake(100, 100, 50, 50); 
} completion:^(BOOL finished) { 
    if (finished) { 
     NSLog(@"animation finished"); 
    } 
}]; 
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]]; 
NSLog(@"after runUntilDate"); 

위와 같은 코드가 너무 많습니다. 그 이유는 무엇입니까? runUntilDate 행에 주석을 달면 어떻게됩니까?왜 애니메이션 문 다음에 runUntilDate를 추가해야합니까?

업데이트 : 마지막 줄에 다음 줄 (NSLog)을 추가하면 애니메이션이 끝날 때까지 실행되지 않습니다. runUntilDate가 주 스레드를 차단하는 것처럼 보이므로 여기에 스레드를 차단해야하는 이유는 무엇입니까?

답변

0

내 생각에, 아무것도 아닐 것입니다. here

+0

runUntilDate가 메인 스레드를 차단할 수있는 이유는 무엇입니까? 그리고 여기와 같은 블록 메인 스레드가 필요할 때? – Sugite

+0

runloop은 주 스레드에서 작동하기 때문에. 이상적으로 어떤 경우에도 주 스레드를 차단해서는 안됩니다. – SerjOxo

+0

runUntilDate runloop의 또 다른 반복을 다시 시작하십시오. 왜 스레드 차단으로 이어지는 지, 원본 수준에서 설명 할 수 있습니까? 감사합니다! – Sugite

관련 문제