drawViewHierarchyInRect:afterScreenUpdates和renderInContext:不工作……其他解决方案?

我需要捕获UIScrollView中的大UIView的一部分。

我使用CALayer的方法renderInContext:因为超过2年。 即使该方法无法渲染特殊对象(如MapView),99%的时间它完美且足够快以满足我的需求。

但是对于iOS7,许多组件的渲染完全是错误的(并且在最新版本的iOS 7.1中变得更糟)。 所以我想使用似乎更专注的新方法,比如UIView的drawViewHierarchyInRect:afterScreenUpdates

不幸的是,我无法让它在真实设备上运行,它渲染黑色图像(空内容)。 它只是在模拟器(视网膜或非视网膜)上的魅力,而且 – 我认为 – 在非视网膜真实设备上(我在第一代iPad mini上测试过)…总结:

  • iPad模拟器工作
  • iPad视网膜模拟器工作
  • iPad mini(第1代)工作
  • iPad 3和4 gen无法正常工作
  • iPad Air无法正常工作

在这里,您可以找到一个显示问题的简单Xcode项目。

在模拟器上运行它,然后在真实(视网膜)设备上运行它以查看差异和问题。

我在这篇post的末尾附上了两个截图,显示了这一点。 左侧图像使用renderInContext:方法显示结果,右侧显示drawViewHierarchyInRect:afterScreenUpdates方法结果。

因为太久了我已经抓住了它! 我甚至通过苹果D​​TS请求帮助,这被拒绝说这听起来像是一个Apple bug,我应该填写一个bug报告(我已经做了很长时间了)。

如果您有任何想法,评论等…我将非常感激。

谢谢

模拟器结果iPad Air结果