2012-03-22 30 views
2

は、コードの次の部分を考慮してください:機能スリープ(の使用の違い)および[[NSRunLoop currentRunLoop] runUntilDate]

iは、アニメーションを作成する関数を呼び出す最初のもので。私はアニメーション

- (void)animationMethod 
{ 
    CAKeyframeAnimation *myAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 
CGMutablePathRef curvedPath    = CGPathCreateMutable(); 

CGPathMoveToPoint(curvedPath, NULL, start.x, start.y); 
CGPathAddCurveToPoint(curvedPath, NULL, fcp.x, fcp.y, scp.x , scp.y, end.x, end.y); 

myAnimation.path    = curvedPath; 
myAnimation.duration   = flight_duration; 
myAnimation.removedOnCompletion = NO; 
myAnimation.delegate   = self; 
myAnimation.fillMode   = kCAFillModeForwards; 

[myAnimation setValue:identifier forKey:@"id"]; 

[flyingBug addAnimation:myAnimation forKey:@"bug_flight"]; 

CGPathRelease(curvedPath); 
} 

を作成し、三番目は、私はすべてがOKに起こっているをチェックするために使用するデリゲートメソッドである第二一

start:; 

[self animationMethod]; 

[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:3]]; 
//sleep(3); 

goto start; 

:私は、一定の時間間隔であることを実行します。

- (void)animationDidStart:(CAAnimation *)anim 
{ 

    NSLog(@"ANIMATION DID START"); 
} 

私はNSRunLoopを使用するときだから、デリゲートメソッドが呼び出され、すべての権利動作しますが、私はsleep(3)機能を使用しようとするならば、デリゲートメソッドがコールを取得していませんed。

私の質問:

1)あなたはNSRunLoopと睡眠()との違いを説明していただけますか?なぜsleep()が使われるとデリゲートメソッドが呼び出されないのですか?

2)おそらく、使用法が優れている3番目の方法がありますか?

答えて

7

NSRunLoopは、実行ループが待機している間にイベントに応答することができるので、より優れています。スレッドをスリープ状態にするだけで、イベントが到着しても(待機しているネットワークの応答のように)アプリケーションはブロックされます。

関連する問題