1

このコードでビューをトリミングできます

- (UIImage *)captureScreenInRect:(CGRect)captureFrame {
    CALayer *layer;
    layer = self.view.layer;
    UIGraphicsBeginImageContext(self.view.bounds.size);
    CGContextClipToRect (UIGraphicsGetCurrentContext(),captureFrame);
    [layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *screenImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return screenImage;
}

しかし、変換でズームインしたイメージビューがあり、縮尺通りに表示されません。

ユーザーが画面上で見ているものを正確にキャプチャするにはどうすればよいですか

4

1 に答える 1

2

スタック オーバーフローの質問"renderInContext:" と CATransform3Dには詳細情報がありますが、要点は次のとおりです。

QCCompositionLayer、CAOpenGLLayer、および QTMovieLayer レイヤーはレンダリングされません。さらに、3D 変換を使用するレイヤーはレンダリングされず、backgroundFilters、フィルター、compositingFilter、またはマスク値を指定するレイヤーもレンダリングされません。

CALayerのドキュメントから)。

詳細については、この技術的な Q&A にも記載されています: http://developer.apple.com/library/ios/#qa/qa1703/_index.html

アプリがアプリ ストアに公開されない場合は、文書化されていないUIGetScreenImageAPIを使用できます。

// Define at top of implementation file
CGImageRef UIGetScreenImage(void);

...

- (void)buttonPressed:(UIButton *)button
{
  // Capture screen here...
  CGImageRef screen = UIGetScreenImage();
  UIImage* image = [UIImage imageWithCGImage:screen];
  CGImageRelease(screen);

  // Save the captured image to photo album
  UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
}

ジョン・ムーチョより

ただし、この API を使用すると、アプリが承認されなくなります。

他の回避策を見つけることができませんでした。

于 2013-03-22T16:17:32.757 に答える