background - 从多任务处理回来后如何恢复 CAAnimation

标签 background core-animation calayer multitasking caanimation

在我的应用程序中,我有一个 CALayer 数组,我已经沿着 bezierPath 设置了动画。当我关闭并重新打开应用程序时,我的图层没有动画,并且与关闭应用程序之前的位置不同。我已经实现了两种方法,pauseLayer 和 resumeLayer,当我用我的应用程序中的两个按钮触发它们时,它们可以工作,但在关闭应用程序后它们将无法工作。代码如下

   - (void)pauseLayers{

    for(int y=0; y<=end;y++)
    {



        CFTimeInterval pausedTime = [car[y] convertTime:CACurrentMediaTime() fromLayer:nil];
        car[y].speed = 0.0;
        car[y].timeOffset = pausedTime;

         standardUserDefaults[y] = [NSUserDefaults standardUserDefaults];


        if (standardUserDefaults[y]) {
            [standardUserDefaults[y] setDouble:pausedTime forKey:@"pausedTime"];
            [standardUserDefaults[y] synchronize];
        }


        NSLog(@"saving positions");


        }


}

-(void)resumeLayers

{  




    for(int y=0; y<=end;y++)
    {




        standardUserDefaults[y] = [NSUserDefaults standardUserDefaults];     
        car[y].timeOffset = [standardUserDefaults[y] doubleForKey:@"pausedTime"];

    CFTimeInterval pausedTime = [car[y] timeOffset];
    car[y].speed = 1.0;
    car[y].timeOffset = 0.0;
    car[y].beginTime = 0.0;

    CFTimeInterval timeSincePause = [car[y] convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
    car[y].beginTime = timeSincePause;
        }


}

最佳答案

- (void)applicationDidEnterBackground:(UIApplication *)application {

 mosquitosViewController *mvc = [[mosquitosViewController alloc] init];
  [mvc pauseLayers];

  }

你在上面尝试做的问题是你正在创建一个全新的 View Controller 实例,这不是屏幕上显示的那个。这就是为什么当您发送 pauseLayers 时什么也没有发生的原因信息。

您应该做的是注册以接收您的应用程序何时进入和来自后台的通知,并在该通知到达时调用适当的方法( pauseLayersresumeLayers )。

您应该在 mosquitosViewController 的某处添加以下代码实现(我通常在 viewDidLoad 中这样做):
// Register for notification that app did enter background
[[NSNotificationCenter defaultCenter] addObserver:self 
                                      selector:@selector(pauseLayers)
                                      name:UIApplicationDidEnterBackgroundNotification 
                                      object:[UIApplication sharedApplication]];

// Register for notification that app did enter foreground
[[NSNotificationCenter defaultCenter] addObserver:self 
                                      selector:@selector(resumeLayers) 
                                      name:UIApplicationWillEnterForegroundNotification 
                                      object:[UIApplication sharedApplication]];

关于background - 从多任务处理回来后如何恢复 CAAnimation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6792701/

相关文章:

css - Bootstrap 模态导致背景偏移

iphone - 如何使用 CABasicAnimation 对图层的框架进行动画处理?

ios - UIView transitionWithView : animation behaviour with background color

iphone - UIButton 在动画期间不交互

ios - 带有 CALayers 的 CAAnimation 偶尔会创建闪烁的动画(包括视频)

ios - 如何在使用隐式动画对 CALayer 进行动画处理时继承动画属性

html - 悬停背景,前面有图像

CSS 背景不工作

css - 用 Sprite 重复背景图像

objective-c - 如何在不影响边框的情况下将 CALayer 的背景设置为透明?