1

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

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

4

2 回答 2

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];
  } 
}

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

希望有帮助。

于 2013-04-25T07:50:52.903 回答
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 屏幕的顶部到底部落下

于 2013-04-25T08:11:18.663 回答