2017-05-15 4 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のもう1つの繰り返しを再起動するだけです。なぜスレッドブロッキングにつながるのですか?ソースレベルで説明できますか?ありがとうございます! – Sugite

関連する問題