为什么我在iOS 7上以编程方式创build屏幕截图看起来很糟糕?

我正试图实现与Facebook分享应用程序。 我用这个代码来截图:

CGSize imageSize = CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height); UIGraphicsBeginImageContext(imageSize); [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); 

它在iOS 6上效果很好,但在iOS 7中,图像看起来非常糟糕。 我使用了这个答案: iOS:什么是以编程方式制作截图的最快,最高效的方法? 试图修复它,并帮助,仍然截图看起来不好。 屏幕获得另一种颜色,并且一些对象(如标签)不会显示在拍摄的图像上。 任何帮助?

—- —-更新

我设法解决最多的对象,通过改变他们保留而不是弱。 我的主要问题仍然是我的桌面视图,显示为一个大的白色块(它应该是透明的,带有白色文本的标签,所以我们看到的只是白色的单元格)。 我确实尝试将表格背景定义为clearcolor,没有帮助。

– – 最后更新 – –

这里有很好的答案,不是真的关于我的问题..我想让它在iOS7上运行的设备上工作,但不使用iOS7 SDK,因为在这一点上切换项目SDK需要很多努力,当项目几乎完成了。

无论如何,我添加了代码的和平,终于解决了我的问题:

这个改变只是解决了这个问题:

 UIGraphicsBeginImageContextWithOptions(imageSize, NO , 0.0f); 

代替:

 UIGraphicsBeginImageContext(imageSize); 

自iOS 7以来,新的API已经被添加,它应该提供获取快照的有效方法

  • snapshotViewAfterScreenUpdates:将视图渲染为一个不可修改content的UIView

  • resizableSnapshotViewFromRect:afterScreenUpdates:withCapInsets :同样的事情,但与可resize的插图

  • drawViewHierarchyInRect:afterScreenUpdates:同样的事情,如果你需要绘制所有的子视图(如标签,button…)

您可以使用UIView返回任何UI效果,或者像您一样,如果您需要导出,则渲染到图像中。

我不知道这个新方法的效果和你提供的一样好吗(虽然我记得苹果公司的工程师说这个新的API更有效率)

你可以试试这个

 - (UIImage *) screenshot { UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, [UIScreen mainScreen].scale); [self.view drawViewHierarchyInRect:self.view.bounds afterScreenUpdates:YES]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; } 

在iOS 8中 :这是我如何获得ScreenShot

  1. 只是添加了一个UIImageView和Method来截取.h文件中的截图

@属性(弱,非primefaces)IBOutlet UIImageView * imageView;

  -(IBAction)takeSnapShot:(id)sender; 

2添加了代码片段,用于截取屏幕截图并在.m文件中设置UIImageView

 - (IBAction)takeSnapShot:(id)sender { UIGraphicsBeginImageContext(self.view.bounds.size); [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *snapShotImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); imageView.image = snapShotImage; } 
  1. 下面是我得到的输出。

在这里输入图像说明

在iOS7上,如果你使用的话,你可能会有毛病

 [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES] 

在进行中的animation。 设置afterScreenUpdates = NO摆脱毛刺。

确保opaque设置为NO