UIViewControlleranimation停止工作

我的应用程序在iOS6中运行良好,但是在未指定的即将发布的iOS版本中,由于NDA的原因,我无法命名,所有UIViewController转换animation都停止工作。 新视图即时popup到位。 我不知道这个未指定的iOS版本是否是原因,因为我偶尔在iOS6中看到过这种情况。

有时animation开始工作一段时间,然后停止,使我觉得这是某种内存警告问题,但我的应用程序在大多数时间使用一个相当合理的〜125MB的RAM。 任何人都可以提供任何意见或事情来调查?

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

因此,您应该始终dispatch_async到主队列中以更新UI。

这些bug很难被捕捉,因为它们并不总是可预见的。

为了捕捉它们,我build立了一个方法,调用一些UIKit方法来检查它们是否在主线程上调用。 这使您可以在符号断点处停止,只要您忘记将其重新发送回主队列。

https://github.com/Cocoanetics/DTFoundation/blob/develop/Core/Source/iOS/Debug/UIView%2BDTDebug.m

在这个问题上的苹果开发论坛的一个很好的解决方法:

做这个:

 [UIView setAnimationsEnabled:YES] 

animation再次开始工作。 我怀疑这是一个直线的iOS7错误,或者在我的代码中的某个地方animation或UIViewController启动发生在后台线程,导致animation停止。 可能与未指定的iOS未来版本无关。

这个问题似乎是由在后台线程中做UIKit的东西造成的。 我有一个预渲染caching充满了NSOperations,呈现复杂的UIView到UIImages来caching输出。 这似乎在iOS6中工作正常,但可能有些过头了。 我需要将图像和文本渲染到graphics缓冲区,而不是使用UIViews和UILabels。

所有你需要做的就是抓住主队列,同时更新UI接收来自API的响应.Ios默认使用主队列来更新UI,但它不是百分之百的高效率。所以你必须确保UI得到更新主线程和方法如下:

 DispatchQueue.main.async{ //UI related code eg: self.label.text = "abc" self.button.setTitle("xyz",.normal) self.tableView.reloadData() } 

如果你不抓住主线程animation可能会或可能不会工作。 但是如果你正在使用主线程animation将会定义工作。

正确的代码,同时更新API上的API响应:

 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() } }) 

不正确的代码可能导致animation停止并导致奇怪的崩溃:

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