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