2

私のiPhoneアプリでは、デバイスのスクリーンショットをキャプチャしています。スクリーンショットビューには、レイヤー階層のあるさまざまなビューがあります。下部には空白の背景ビューがあり、背景の上には画像ビューがあり、画像ビューの上にはEAGLViewがあります。EAGLViewのフレームサイズでデバイスのスクリーンショットをキャプチャしたいのですが、imageviewとbackgroundviewが含まれている必要があります。これが私のコードです:

- (IBAction)captureScreen:(id)sender{

    UIGraphicsBeginImageContext(self.view.bounds.size);

    [self.cameraAppView.layer renderInContext:UIGraphicsGetCurrentContext()]; // cameraAppView is the EAGLView

    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    CGImageRef imageRef = CGImageCreateWithImageInRect([viewImage CGImage], cameraAppView.frame);

    UIImage *img = [UIImage imageWithCGImage:imageRef];

    CGImageRelease(imageRef);
}

しかし、今はEAGLViewのスクリーンショットしか取得していないので、EAGLViewのフレームサイズでデバイスのスクリーンショットを取得したいと思います。どうやってやるの?

編集

申し訳ありませんが、質問のポイントを逃しました。同じ画面に他のサブビューもいくつかあります。しかし、それらはすべてEAGLViewのトップです。EAGLViewコンテンツを含むEAGLViewの下にあるビューの画像をキャプチャしたいと思います。

4

2 に答える 2

1

ついに自分で答えを見つけました。それはトリッキーなものであり、これを行うための他の適切な方法があるかどうかはわかりません. 私の必要性のために、それは完全に機能しています。私がしたことは、スクリーンショット画像に含まれてはならないサブビューを非表示にし、画像がキャプチャされたらサブビューを再表示することです。

誰かがこれを行う適切な方法を見つけた場合は、共有してください。

于 2012-06-26T12:52:29.690 に答える
0

代わりにキャプチャするビューを指定します

[self.cameraAppView.layer renderInContext:UIGraphicsGetCurrentContext()];

使用する

[self.cameraAppView.superView.superView.layer renderInContext:UIGraphicsGetCurrentContext()];

これは、EAGLView が、キャプチャするビューのサブビューである imageView のサブビューである場合に機能します。

于 2012-06-26T11:10:43.757 に答える