我可以使用此代码裁剪视图
- (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,并且没有按比例显示。
如何捕获完全用户在屏幕上看到的内容
答案 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会使您的应用无法获得批准。
我无法找到任何其他解决方法。