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가 주 스레드를 차단하는 것처럼 보이므로 여기에 스레드를 차단해야하는 이유는 무엇입니까?
runUntilDate가 메인 스레드를 차단할 수있는 이유는 무엇입니까? 그리고 여기와 같은 블록 메인 스레드가 필요할 때? – Sugite
runloop은 주 스레드에서 작동하기 때문에. 이상적으로 어떤 경우에도 주 스레드를 차단해서는 안됩니다. – SerjOxo
runUntilDate runloop의 또 다른 반복을 다시 시작하십시오. 왜 스레드 차단으로 이어지는 지, 원본 수준에서 설명 할 수 있습니까? 감사합니다! – Sugite