UIPickerView 在屏幕截图上变暗

UIPickerView get darker on screenshot

我不得不在某些情况下更改导航,并且由于转换的复杂性,我在转换完成之前进行了绘图和截图。在大多数情况下,这种方法效果很好,但有一点让我感到不安。我有一个带有两个选择器视图的视图控制器:

但是截图在这个 VC 上效果不佳。我明白了:

两种情况下截图的代码如下:

- (UIImage *)takeScreenshot {
    CALayer *layer = [[UIApplication sharedApplication] keyWindow].layer;
    UIGraphicsBeginImageContext(layer.frame.size);
    [layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
    return screenshot;
}

有人知道怎么会发生吗?

您可以尝试使用其他方法进行截图。苹果在iOS7中介绍了一些快速查看截图的方法。

UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, 0);
[self.view drawViewHierarchyInRect:self.view.bounds afterScreenUpdates:YES];
UIImage *im = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

Here 是 Apple 的回答,提供了有关这两种方法如何工作的更多信息。虽然各自的用户遇到了一些 pb 并被建议使用旧的视图快照方式,但我从来没有遇到过任何问题。也许他们从那时起就修复了它。

UIGraphicsBeginImageContext(self.window.bounds.size);

[self.window.layer renderInContext:UIGraphicsGetCurrentContext()];

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

NSData * data = UIImagePNGRepresentation(image);

[data writeToFile:@"image.png" atomically:YES];

如果您有视网膜显示器,请将第一行替换为以下代码:-

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
UIGraphicsBeginImageContextWithOptions(self.window.bounds.size, NO,[UIScreen mainScreen].scale);

else

UIGraphicsBeginImageContext(self.window.bounds.size);