有人可以解释'CoreAnimation:timed out fence'日志消息吗?

Wil*_*lam 5 cocoa-touch core-animation ios

我收到了一份关于我们的iPad应用程序崩溃的报告,附带了一条日志消息.日志消息的最后几行如下:

Aug 21 08:58:51 2TesterPad backboardd[26] <Warning>: CoreAnimation: timed out fence 25993
Aug 21 08:58:51 2TesterPad backboardd[26] <Warning>: CoreAnimation: updates deferred for too long
Aug 21 08:58:52 2TesterPad AppName[2428] <Warning>: CoreAnimation: failed to receive fence reply: 10004003
Run Code Online (Sandbox Code Playgroud)

谁能告诉我这些日志消息的意思呢?我一直无法在网上找到任何关于此的信息.

mem*_*ons 10

它通常意味着核心动画操作排队,但已经等待太久并且已经超时.

要检查的一些事项:

  • 确保在任何-viewDidAppear和上调用super方法-viewWillAppear
  • 确保在通过视图显示之前不执行动画 -viewDidAppear
  • 检查您是否只与主线程上的UI进行交互.当在后台线程上执行相关代码时,我在显示UIAlertView时看到了等待栅栏消息的问题.您可以通过将代码放在一个块中并将其发送到主线程来确保,例如下面的示例
  • 如果你有一个UIScollView拥有大量子视图并且你有动画的子视图,就会发生这种情况UIScrollView.在这种情况下,它将为其所有子视图设置动画,即使这些子视图不在屏幕上也是如此.请参阅此答案:https://stackoverflow.com/a/10938889/257550.解决这个问题的一个解决方案是重新设计视图以使用a UITableView确保只有可见单元格中的子视图被动画化.

    dispatch_async(dispatch_get_main_queue(), ^{
    
        UIAlertView *alert = 
           [[UIAlertView alloc] initWithTitle:@"title", 
                                       mssage:@"message"
                                     delegate:nil 
                            cancelButtonTitle:@"OK"
                            otherButtonTitles:nil];
    
        [alert show];
    });
    
    Run Code Online (Sandbox Code Playgroud)