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?
试图修复它,它有帮助,但屏幕截图看起来仍然很糟糕。
屏幕得到另一种颜色,并且某些对象(如标签)未显示在拍摄的图像上。
有什么帮助吗?

- - 更新 - -

我设法解决了大多数对象,通过将它们更改为保留而不是弱。我的主要问题仍然是我的表格 View ,它显示为一个大的白色 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 (如标签、按钮...)

  • 您可以使用 UIView为任何 UI 效果返回,或者在需要导出时像您所做的那样渲染到图像中。

    我不知道这种新方法与您提供的方法相比有多好(尽管我记得 Apple 工程师说这种新 API 更有效)

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

    相关文章:

    iphone - applicationDidBecomeActive 被调用两次

    objective-c - ObjC 类对象可以符合协议(protocol)吗?

    iphone - MFMailComposeViewController 不从 View 中关闭

    iphone - 使用 PhoneGap 在 iPhone/Android/WP7 上进行应用内购买

    ios - 以编程方式将 UIScrollView 添加到 UIView 在 vi​​ewDidLoad 中不起作用,但在 viewDidAppear 中起作用?

    ios - 连接 IBOutlet Xcode 4.4

    ios - ASIHTTPRequest 多个 POST 参数

    ios - 使用自动布局调整大小的 UICollectionViewCell

    objective-c - SKPhysicsBody 不符合预期

    ios - 如何在 ios 中单击按钮时将 WKInterfaceTimer 值存储在变量中?