在我的应用程序中,我使用drawViewHierarchyInRect:afterScreenUpdates:
为了获得我视野中的模糊图像(使用AppleUIImage
类别UI图像效果 https://developer.apple.com/downloads/index.action).
我的代码如下所示:
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, 0);
[self.view drawViewHierarchyInRect:self.view.bounds afterScreenUpdates:YES];
UIImage *im = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
/* Use im */
我注意到在开发过程中,我的许多动画在使用我的应用程序一段时间后都会延迟,也就是说,与应用程序的新启动相比,我的视图在明显(但不到一秒)的暂停后开始动画。
经过一些调试后,我注意到仅使用的行为drawViewHierarchyInRect:afterScreenUpdates:
屏幕更新设置为YES
造成了这次延误。如果在使用会话期间从未发送此消息,则不会出现延迟。使用NO
对于屏幕更新参数也使延迟消失。
奇怪的是这个模糊的代码是完全不相关(据我所知)延迟的动画。有问题的动画不使用 drawViewHierarchyInRect:afterScreenUpdates:
, 他们是CAKeyframeAnimation
动画。发送此消息的行为(屏幕更新设置为YES
)似乎在我的应用程序中对全局动画产生了影响。
这是怎么回事?
(我制作了演示效果的视频:with https://dl.dropboxusercontent.com/u/1991225/Tall%20Chess%20Delay.mov and without https://dl.dropboxusercontent.com/u/1991225/Tall%20Chess%20No%20Delay.mov动画延迟。请注意“检查!”出现的延迟。导航栏中的对话框。)
UPDATE
我创建了一个示例项目来说明这个潜在的错误。https://github.com/timarnold/AnimationBugExample https://github.com/timarnold/AnimationBugExample
更新2号
我收到了 Apple 的回复,确认这是一个错误。查看答案below https://stackoverflow.com/a/25704861/1148702.