我正在创建一个游戏,其中我必须从上到下连续移动传送带。当我的应用程序进入后台并稍后恢复时出现问题。
对象从当前位置移除,动画停止。
正如评论所描述的那样,您基本上不能这样做,至少不能以一种直截了当的方式。让我向您展示我将如何解决以下问题:
您遇到的主要问题是,当一个对象被动画时,对象的实际位置并没有真正改变。改变的是表示层!那么,你怎么能知道物体的确切位置呢?好吧,理论上您可以通过向图层表示层询问实际的帧、锚点或您正在制作动画的任何属性来做到这一点:
[[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];
}
}
现在,一旦应用程序恢复,您应该可以从那里继续。
希望有帮助。
-(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 屏幕的顶部到底部落下