2015-05-04 132 views
4

我必须在某些情况下更改导航,并且由于过渡的复杂性,我需要绘制屏幕截图,直到过渡完成。在几乎所有情况下,这种方式都很好,但是有一点让我感到困惑。我有两个选择器视图的视图控制器:UIPickerView在屏幕截图上变暗

enter image description here

但是截图是不是这个VC运作良好。我得到这个:

enter image description here

,是以截图是在两种情况下下面的代码:

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

任何人知道如何能发生?

+0

[层renderInContext:UIGraphicsGetCurrentContext()];删除这一行,然后尝试。 –

+0

您的解决方案无法按预期工作。如果我删除该行,屏幕截图不会显示导航,不会显示其他视图等。 – jherran

+0

您正在做一些事情错误..我会检查它等待。 –

回答

4

您可以尝试使用不同的截图方法。苹果在iOS 7中引入了一些快速查看截图的方法。

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

Here是Apple提供的关于2种方法如何工作的更多信息的答案。虽然相应的用户遇到了一些PB,并建议使用旧的方式快照视图,但我从来没有任何问题。也许他们从那时起就修正了它。

+0

完美。我不得不用'[[UIApplication sharedApplication] keyWindow]'来更改'self.view'来捕获NavigationBar,否则它不会出现。但效果很好。 – jherran

1
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); 
+0

希望它可以帮助.. –