是否可以在不打开特定视图的情况下拍摄屏幕截图?

时间:2012-11-10 07:29:41

标签: iphone objective-c ios screenshot core-plot

我是iPhone开发新手。对iPhone技术中的视图和布局不太熟悉。

我想实现的是:

  • 我在包含一个按钮的页面中,单击该按钮我打开图表视图(使用核心图)。
  • 我想拍一张该图表视图的截图,但我不想打开那个视图。

这可能吗?

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:5)

是的,您可以将视图图层合成到位图上下文中,然后从中获取图像对象:

CGContextRef CGContextCreate(CGSize size)
{
    CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
    CGContextRef ctx = CGBitmapContextCreate(NULL, size.width, size.height, 8, size.width * (CGColorSpaceGetNumberOfComponents(space) + 1), space, kCGImageAlphaPremultipliedLast);
    CGColorSpaceRelease(space);
    return ctx;
}

- (UIImage *)screenshotView:(UIView *)view
{
    CGSize size = view.frame.size;

    // Check for retina display
    if ([[UIScreen mainScreen] scale] > 1.5f) {
        size.width *= 2;
        size.height *= 2;
    }

    CGContextRef ctx = CGContextCreate(size);
    CGAffineTransform normalize = CGAffineTransformMake(1, 0, 0, -1, 0, size.height);
    CGContextConcatCTM(ctx, normalize);

    [[view layer] renderInContext:ctx];

    CGImage cgImg = CGBitmapContextCreateImage(ctx);
    UIImage *img = [UIImage imageWithCGImage:cgImg];
    CGImageRelease(cgImg);
    CGContextRelease(ctx);

    return img;
}

答案 1 :(得分:1)

是的,你可以这样做。

UIView *yourView = /* get your chart view */;
UIGraphicsBeginImageContext(yourView.bounds.size);
[yourView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *yourViewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

现在你有了一张带有你视角图像的UIImage。

答案 2 :(得分:0)

UIGraphicsBeginImageContext(self.view.bounds.size); // You can put your view here.
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData *data = [UIImagePNGRepresentation(image) retain];
UIImage *screenShot = [UIImage imageWithData:data];

答案 3 :(得分:0)

这内置于核心图:

UIImage *screenShot = [graph imageOfLayer];

graph是您的核心图表(CPTXYGraph),而不是托管视图。如果图表的大小不在托管视图中,请务必在调用-imageOfLayer之前设置图表的大小。如果您不打算在屏幕上显示,则根本不需要托管视图。