Ios UIViewController动画停止工作

Ios UIViewController动画停止工作,ios,uiviewcontroller,Ios,Uiviewcontroller,我的应用程序在iOS6中运行良好,但在因NDA原因而无法命名的未指定即将发布的iOS版本中,所有UIViewControllertransition动画都停止工作。新的视图会立即出现。我不确定这个未指明的iOS未来版本是否是原因,正如我在iOS6中偶尔看到的那样 有时,动画开始工作一段时间,然后很快就停止了,这让我觉得这是某种内存警告问题,但我的应用程序在大多数情况下使用了相当合理的125MB内存。有人能提供一些建议或事情进行调查吗?苹果开发者论坛提供了一个很好的解决方案: 这样做: [UIVi

我的应用程序在iOS6中运行良好,但在因NDA原因而无法命名的未指定即将发布的iOS版本中,所有
UIViewController
transition动画都停止工作。新的视图会立即出现。我不确定这个未指明的iOS未来版本是否是原因,正如我在iOS6中偶尔看到的那样


有时,动画开始工作一段时间,然后很快就停止了,这让我觉得这是某种内存警告问题,但我的应用程序在大多数情况下使用了相当合理的125MB内存。有人能提供一些建议或事情进行调查吗?

苹果开发者论坛提供了一个很好的解决方案:

这样做:

[UIView setAnimationsEnabled:YES] 

动画又开始工作了。我怀疑这是一个直接的iOS7错误,或者在我的代码中的某个地方,一个动画或
UIViewController
launch正在后台线程上发生,导致动画停止。可能与未指明的iOS未来版本无关。

此问题似乎是由于在后台线程中执行UIKit操作造成的。我有一个预渲染缓存,其中充满了NSO操作,可以将复杂的UIView渲染为UIImages以缓存输出。这在iOS6中似乎工作得很好,但可能有点越界了。我需要将此功能替换为将图像和文本渲染到图形缓冲区的功能,而不是使用UIView和UILabel

所描述的行为一直存在:如果您在后台线程上工作,然后调用和UIKit方法,那么更新通常会以一种奇怪的方式延迟

因此,您应该始终
dispatch\u async
到主队列以更新UI

这些bug很难捕获,因为它们并不总是可以预测地发生

为了捕获它们,我构建了一个方法,该方法使用一些UIKit方法来检查它们是否在主线程上被调用。这允许您在忘记将其分派回主队列时,在符号断点上停止


您所要做的就是在收到API的响应时更新UI时抓住主队列。Ios默认情况下使用主队列更新UI,但效率不是100%。因此,您必须确保UI仅在主线程上更新,方法如下:

DispatchQueue.main.async{
  //UI related code eg: 
  self.label.text = "abc" 
  self.button.setTitle("xyz",.normal)
  self.tableView.reloadData()
}
如果没有抓住主线,动画可能会工作,也可能不工作。 但是,如果您使用的是主线程动画,那么它肯定会工作

在api响应上更新UI时更正代码:

Alamofire.getApiCall(paramaters: parameters, completion:{
  response in 
  // UI related code.
  DispatchQueue.main.async{
    self.label.text = "abc" 
    self.button.setTitle("xyz",.normal)
    self.tableView.reloadData()
  }
})
可能导致动画停止并导致奇怪崩溃的错误代码:

  Alamofire.getApiCall(paramaters: parameters, completion:{
  response in 
  // UI related code.
    self.label.text = "abc" 
    self.button.setTitle("xyz",.normal)
    self.tableView.reloadData()
})

更多信息将在这里有用。你在制作什么动画,如何制作?你能发布一些相关代码吗?否则,你可能会在苹果开发者论坛上更幸运。我正在做绝对正常的[self.navigationController-pushViewController:viewController-animated:YES]-风格的视图控制器转换。不幸的是,在我的经验中,苹果开发者论坛与之相比有点荒芜,但我也有一个打开的线程。你根本没有使用UIViewController的自定义子类?只是库存零件?我从未听说过动画因为记忆压力而停止;这似乎不太可能。它们是子类,但完全是标准类。我绝对没有做任何奇怪的事。他们有视图,我正在以正常方式使用它们。如果iOS 6中存在相同的代码库,并且您偶尔也会在iOS 6中看到它,为什么不将其发布以供审阅?仅供参考,我们的应用程序视图动画似乎可以正常工作,仅供参考。还增加了一个问题。我认为这是一个不错的问题。你为什么要发布答案?这也是两个答案吗?请在编辑后对此提出疑问…这段代码正是我找到后台线程的方式。从iHunter的源代码来看,您需要DTObjectBlockExecutor、NSObject+DTRuntime和UIView+DTDebug来快速切换view方法并捕获问题。将代码引入项目有点麻烦(因为依赖项和CoCoapod不完整),但一旦设置断点,您将在几分钟内找到错误的代码行。谢谢!我如何在我的项目中使用UIView\u DTDebug类。我已从源代码中添加了DTDebug、DTObjectBlockerExecutor、NSObject和UIVew类。但我遇到了错误:找不到UIView的接口声明以及更多…非常感谢链接!帮助我从后台线程进行的nd UI调用。