我正在制作一个游戏,我必须从上到下连续移动传送带。当我的应用程序进入后台并稍后恢复时会出现问题。
从当前位置移除对象,动画停止。
答案 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屏幕的顶部到底部落下