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

标签 ios objective-c iphone xcode screenshot

我正在尝试实现与 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: what's the fastest, most performant way to make a screenshot programmatically? 试图修复它,并且它有所帮助,但屏幕截图看起来仍然很糟糕。 屏幕变成另一种颜色,一些对象(如标签)没有显示在拍摄的图像上。 有帮助吗?

----更新----

我设法解决了大多数对象,方法是将它们更改为保留而不是弱化。我的主要问题仍然是我的 tableview,它显示为一个大的白色 block (它应该是透明的,带有带有白色文本的标签,所以我们看到的只是白色单元格)。我确实尝试将表格背景定义为 clearcolor,但没有帮助..

----最后更新---

这里有很好的答案,但与我的问题无关。我想让它在运行 iOS7 但不使用 iOS7 SDK 的设备上运行,因为在这一点上切换项目 SDK 需要付出很多努力,当项目快完成时。

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

这个改动简单的解决了问题:

UIGraphicsBeginImageContextWithOptions(imageSize, NO , 0.0f);

代替:

UIGraphicsBeginImageContext(imageSize);

最佳答案

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

  • snapshotViewAfterScreenUpdates: 将 View 呈现为具有不可修改的 content

  • 的 UIView
  • resizableSnapshotViewFromRect:afterScreenUpdates:withCapInsets:同样的事情,但带有可调整大小的插图

  • drawViewHierarchyInRect:afterScreenUpdates::如果您也需要绘制所有 subview (如标签、按钮...),则同样如此

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

我不知道这种新方法与您提供的方法相比效果如何(尽管我记得 Apple 工程师说这种新 API 效率更高)

关于ios - 为什么我以编程方式创建的屏幕截图在 iOS 7 上看起来很糟糕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18956611/

相关文章:

ios - 如何在 cellforrowatindexpath 之后更新自定义表格单元格中的 UIButton 图像?

ios - 无法在 IOS 中多次执行 X 分钟的函数调用

ios - 禁用 uitableview 突出显示但允许选择单个单元格

iphone - 如何检测圆形 View 内的触摸

iphone - 在 UINavigationController 中如何调用父函数

iphone - 如何在 iphone sdk 中播放像 youtube 播放器这样的视频?

ios - 如何使用 AVFoundation 和相机 View 更改 fps 并隐藏状态栏

objective-c - 在没有 ViewController 的情况下制作应用程序时如何使用 RootViewController?

iphone - 为什么我的 UIWebView 中没有应用 CSS?

objective-c - 我不明白何时需要调用重写方法或者只是不需要。