从苹果的专用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];

最佳答案

关于如何获取屏幕图像,有很多答案。在您的情况下,我想问题是使用 private API会获得整个屏幕,而在后者中(但是如果您不显示一些代码则很难说),您将仅呈现视图的一部分。您可以使用2种 public 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];
    }
    

    关于ios - UIGetScreenImage()的替代方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23309709/

    10-09 06:31