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.layerrenderInContextから取得したスクリーンショット上の要素の位置を強制終了します。したがって、Webページ上で「実際に3D」に配置された要素をキャプチャする方法はありません。

于 2012-09-06T08:55:21.073 に答える