如何截取已转换的视图?

时间:2013-03-22 16:05:33

标签: iphone objective-c quartz-graphics

我可以使用此代码裁剪视图

- (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,并且没有按比例显示。

如何捕获完全用户在屏幕上看到的内容

1 个答案:

答案 0 :(得分:2)

Stack Overflow问题"renderInContext:" and CATransform3D有更多信息,但要点是:

  

未呈现QCCompositionLayer,CAOpenGLLayer和QTMovieLayer图层。此外,不会渲染使用3D变换的图层,也不会渲染指定backgroundFilters,filters,compositingFilter或蒙版值的图层。

(来自the CALayer docs)。

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

(来自John Muchow

但是,使用此API会使您的应用无法获得批准。

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