如何在iOS中创建连续动画,这也将在后台应用程序时运行?

时间:2013-04-25 06:41:39

标签: ios core-animation

我正在制作一个游戏,我必须从上到下连续移动传送带。当我的应用程序进入后台并稍后恢复时会出现问题。

从当前位置移除对象,动画停止。

2 个答案:

答案 0 :(得分:0)

正如评论所描述的那样,你基本上不能这样做,至少不是以一种直接的方式。 让我告诉你我将如何解决以下问题:

你遇到的主要问题是,当一个对象被动画化时,对象的实际位置并没有真正改变。相反,表示层有什么变化! 那么,你怎么知道物体的确切位置?好吧,从理论上讲,你可以通过向图层表示层询问实际帧,锚点或任何你正在制作动画的属性来做到这一点:

 [[myView.layer presentationLayer] frame];

所以,我要做的是当应用程序进入后台时,我会设置更新所有视图以反映表示层。当你回来时,我会从那里恢复动画。对象应该在正确的位置。

 NSAarray *viewsBeingAnimated;

- (void)applicationWillEnterForeground:(UIApplication *)application{
 for (UIView *oneView in viewBeingAnimated){
    // Update whatever other properties that you were animating
    [oneView setFrame:[[myView.layer presentationLayer] frame]];

    [oneView layer] removeAllAnimations];
  } 
}

现在,一旦应用程序恢复,您应该可以从那里继续。

希望有所帮助。

答案 1 :(得分:0)

-(void)pauseLayer:(CALayer*)layer{   
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
layer.speed = 0.0;
layer.timeOffset = pausedTime;}

#pragma mark -resume game

-(void)resumeLayer:(CALayer*)layer{   
NSLog(@"paused:%f",[layer timeOffset]);
CFTimeInterval pausedTime = [layer timeOffset];
layer.speed = 1.0;
layer.timeOffset = 0.0;
layer.beginTime = 0.0;
CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
layer.beginTime = timeSincePause;} 

我正在使用此代码,我正在使用基于块的动画来动画成千上万的图像 - 一次从iPhone屏幕的顶部到底部落下