替代UIGetScreenImage()

时间:2014-04-26 10:40:33

标签: ios screenshot retina-display

在视网膜显示中,从苹果的私有API UIGetScreenImage()返回的屏幕截图图像 640x1136 ,但其他替代代码仅提供320x568。是否可以在@ 2x模式下拍摄屏幕?

这是我正在使用的代码

-(UIImage*)getScreenShot:(CALayer*)layer 
{
        UIGraphicsBeginImageContextWithOptions(layer.frame.size, NO, 0.0);
        [layer renderInContext:UIGraphicsGetCurrentContext()];
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return image;
}

   [self getScreenShot:self.window.layer];

1 个答案:

答案 0 :(得分:1)

关于如何获取屏幕图像有很多答案。在你的情况下,我想问题是使用私有API你得到整个屏幕,在后者(但如果你没有显示一些代码很难说)你只渲染视图的一部分。您有2个公共API选项:

  • renderInContext
  • drawViewHierarchy(仅限iOS7,可能还有>)

这个片段总结了2个方法,它是一个UIView类,所以你应该在UIView对象(或子类)上发送这个消息。将其发送到窗口即可获得全屏

- (UIImage *) imageByRenderingViewOpaque:(BOOL) yesOrNO {
        UIGraphicsBeginImageContextWithOptions(self.bounds.size, yesOrNO, 0);

    if ([self respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) {
        [self drawViewHierarchyInRect:self.bounds afterScreenUpdates:NO];
    }
    else {
        [self.layer renderInContext:UIGraphicsGetCurrentContext()];
    }
    UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return resultingImage;
}
- (UIImage *) imageByRenderingView{
    return [self imageByRenderingViewOpaque:NO];
}