4

最近,我尝试使用动画元素捕获 UIWebView 的屏幕截图。问题是它们出现在屏幕截图上的原始位置,就像没有动画一样。我尝试使用以下代码来解决此问题:

CGRect screenRect = [[UIScreen mainScreen] bounds];
UIGraphicsBeginImageContext(self.frame.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[[UIColor clearColor] set];
CGContextFillRect(context, screenRect);
[[self.layer presentationLayer] renderInContext:context];
UIImage *screenImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return screenImage;

但它使用 EXC_BAD_ACCESS 删除了我的应用程序。一项小研究表明,这种行为是由于快速变化的presentationLayer造成的;所以当我尝试 renderInContext 时,它实际上不存在,[self.layer presentationLayer]现在返回另一个 CALayer 对象。

所以问题是如何从动画层的当前状态中获取图像,或者(这也可能是一个解决方案)如何阻止它在截屏时更改presentationLayer?

[更新] 更有趣:presentationLayer 似乎是空的,因为它的内容是 nil,正如我在调试器中看到的那样......

4

1 回答 1

0

好的,问题出在 CSS 中:

-webkit-transform: perspective(100px) translate3d(200px, 100px, -50px) rotateY(15deg);

任何透视或rotateY/rotateX 都会杀死屏幕截图上元素的位置,取自view.layer renderInContext。所以没有办法捕捉网页上“真正的 3d”定位元素。

于 2012-09-06T08:55:21.073 回答