从view.layer的presentationLayer中捕获图像

时间:2012-09-05 19:40:49

标签: objective-c ipad uiview screenshot calayer

最近,我尝试使用动画元素捕获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,正如我在调试器中看到的那样......

1 个答案:

答案 0 :(得分:0)

好的,问题出在CSS:

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

任何透视或rotateY / rotateX都会杀死屏幕截图上元素的位置,取自view.layer renderInContext。因此,无法在网页上捕获“真正的3d”定位元素。