Пожалуйста, рассмотрите следующие фрагменты кода:
В первом я вызываю функцию, которая создает анимацию.я делаю это с определенным интервалом времени:
start:;
[self animationMethod];
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:3]];
//sleep(3);
goto start;
Во втором я создаю анимацию
- (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);
}
, а третий - метод делегата, который я использую, чтобы проверить всепроисходит нормально:
- (void)animationDidStart:(CAAnimation *)anim
{
NSLog(@"ANIMATION DID START");
}
Так что, когда я использую NSRunLoop
, все работает нормально, вызывается метод делегата, но если я пытаюсь использовать функцию sleep(3)
, метод делегата не получаетназывается.
Мои вопросы:
1) Не могли бы вы объяснить разницу между NSRunLoop и sleep ()?Почему метод делегата не вызывается при использовании sleep ()?
2) Может быть, существует третий возможный метод, который лучше в использовании?