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