如何拍摄具有变换视图的屏幕截图?(How do I take a screenshot of a v

2019-08-17 21:53发布

我能够裁剪视图使用此代码

- (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;
}

但是我有变换放大的imageview的并且不按比例显示。

如何捕捉精彩的用户看到屏幕上的内容

Answer 1:

堆栈溢出问题“renderInContext:”和CATransform3D有更多的信息,但要点是:

QCCompositionLayer,CAOpenGLLayer和QTMovieLayer层不会呈现。 此外,使用3D变换层未呈现,也不是指定backgroundFilters,过滤器,compositingFilter或掩码值的层。

(从所述的CALayer文档 )。

更多信息也可在此技术Q&A: http://developer.apple.com/library/ios/#qa/qa1703/_index.html

如果您的应用程序不会应用商店,你可以使用无证UIGetScreenImage API:

// 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);
}

(由约翰Muchow )

然而,使用该API将使您的应用程序不会得到批准。

我一直无法找到任何其他解决方法。



文章来源: How do I take a screenshot of a view which has transform?