请考虑以下代码段:
在第一个中,我调用了一个创建动画的函数。我以一定的时间间隔这样做:
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);
}
第三个是我用来检查一切正常的委托(delegate)方法:
- (void)animationDidStart:(CAAnimation *)anim
{
NSLog(@"ANIMATION DID START");
}
因此,当我使用
NSRunLoop
时,它可以正常工作,会调用委托(delegate)方法,但是如果我尝试与 sleep(3)
函数一起使用,则不会调用委托(delegate)方法。我的问题:
1)你能解释一下 NSRunLoop 和 sleep() 之间的区别吗?为什么在使用 sleep() 时不调用委托(delegate)方法?
2)也许还有第三种可能的方法更好用?
最佳答案
NSRunLoop 更好,因为它允许 runloop 在您等待时响应事件。如果您只是让线程休眠,即使事件到达(例如您正在等待的网络响应),您的应用程序也会阻塞。
关于iphone - 函数 sleep() 和 [[NSRunLoop currentRunLoop] runUntilDate] 的用法区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9819004/