2

現在のビューの画像をプログラムで UIImage に保存しようとしています。現在のビューには背景が含まれており、レイヤーに 3D 変換が適用された多数の UIImageViews が含まれています。

CATransform3D t = CATransform3DIdentity;
t = CATransform3DRotate(t, rotationX, 1.0, 0, 0);
t = CATransform3DRotate(t, rotationY, 0, 1.0, 0);
object.layer.transform = t;

現在、次のコードを使用して現在のビューのスクリーンショットを取得しています。

UIGraphicsBeginImageContext(background.bounds.size);
[background.window.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

ただし、オブジェクトの 3D 変換は失われます。たとえば、3D 変換が適用されていないかのようにオブジェクトが保存された画像に表示されます。3D 変換を含むスクリーンショットをプログラムで取得する方法はありますか?

UIGetScreenImage() はプライベート API であり、このアプリはアプリ ストアに送信されるため、オプションではありません。

4

1 に答える 1

1

renderInContext は Core Animation 変換をレンダリングせず、UIGetScreenImage() は公開 API ではないため、現時点では実行できないと思います。同じ質問が StackOverflow で既に尋ねられました。

1) 3D 変換された UIImageView から UIImage を作成/レンダリングするにはどうすればよいですか?

2) CALayer renderInContext

その機能がアプリケーションの鍵となる場合は、OpenGL ビューを使用してカラー バッファーをキャプチャすることを検討します (表示したくない場合はオフスクリーンでレンダリングできます)。

于 2010-11-25T02:14:32.327 に答える