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

Stack Overflow 问题“renderInContext:”和 CATransform3D有更多信息,但要点是:

QCCompositionLayer、CAOpenGLLayer 和 QTMovieLayer 图层不会被渲染。此外,不会渲染使用 3D 变换的图层,也不会渲染指定背景过滤器、过滤器、合成过滤器或遮罩值的图层。

(来自CALayer 文档)。

此技术问答中还提供了更多信息: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 回答