最近、アニメーション要素を使用して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であるため、空のようです...