1

ベースビュー (UIView) と背景イメージ (UIImageView) があります。(背景画像はベース ビューのサブビューではありません。) また、self.view含めたくないビューが他にもあります。ボタンをクリックすると、次のようにスクリーンショットが撮られます。

CGRect rect = [baseView bounds];
UIGraphicsBeginImageContextWithOptions(rect.size,YES,0.0f);
CGContextRef context = UIGraphicsGetCurrentContext();
[baseView.layer renderInContext:context];
UIImage *capturedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

UIImageWriteToSavedPhotosAlbum(capturedImage, self, @selector(image:didFinishSavingWithError:contextInfo:),nil);

これはベースビューです:

baseView = [[UIView alloc] initWithFrame:CGRectMake(([UIScreen mainScreen].bounds.origin.x), ([UIScreen mainScreen].bounds.origin.y), ([UIScreen mainScreen].bounds.size.width), ([UIScreen mainScreen].bounds.size.height))];
baseView.backgroundColor = [UIColor clearColor];
[self.view addSubview:baseView];

これは背景画像です:

backgroundImage = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,[UIScreen mainScreen].bounds.size.width,[UIScreen mainScreen].bounds.size.height)];
backgroundImage.backgroundColor = [UIColor grayColor];
[self.view addSubview:backgroundImage];
[self.view sendSubviewToBack:backgroundImage];

スクリーンショットは明らかにベースビューのみをキャプチャしますが、背景画像も画像にキャプチャする必要があります。これを行う方法はありますか?
代わりにベースビューの backgroundColor として背景画像を追加することでこれを解決できますが、画面に合わせて繰り返されることは望ましくありません。

4

1 に答える 1

4

コンテキストで両方をレンダリングするだけです:

CGRect rect = [baseView bounds];
UIGraphicsBeginImageContextWithOptions(rect.size,YES,0.0f);
CGContextRef context = UIGraphicsGetCurrentContext();
[backgroundImage.layer renderInContext:context];
[baseView.layer renderInContext:context];
UIImage *capturedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
于 2013-07-29T02:37:43.997 に答える