我正在尝试与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,显示为一个大的白色块(它应该是透明的,带有白色文本的标签,所以我们看到的只是白色单元格)。我确实尝试将表格背景定义为clearcolor,而不是帮助..
----最后更新---
这里有很好的答案,并不是真的与我的问题有关..我想让它在iOS7上运行但不使用iOS7 SDK的设备上工作,因为在这一点上需要花费很多精力来切换项目SDK,当项目快完成时。
无论如何,我添加了最终解决了我的问题的代码的和平:
此更改只是解决了问题:
UIGraphicsBeginImageContextWithOptions(imageSize, NO , 0.0f);
而不是:
UIGraphicsBeginImageContext(imageSize);
答案 0 :(得分:55)
自iOS 7以来添加了新的API,它应该提供有效的快照获取方式
snapshotViewAfterScreenUpdates:
将视图呈现为具有不可修改的content
resizableSnapshotViewFromRect:afterScreenUpdates:withCapInsets
:同样的事情,但有可调整大小的插图
drawViewHierarchyInRect:afterScreenUpdates:
:同样的事情,如果你也需要绘制所有子视图(比如标签,按钮......)
您可以使用针对任何UI效果返回的UIView
,或者将其呈现为您需要导出时的图像。
我不知道这个新方法对你提供的VS有多好(虽然我记得Apple工程师说这个新API效率更高)
答案 1 :(得分:30)
你可以试试这个
- (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;
}
答案 2 :(得分:6)
iOS 8中的:这就是我正在做的事情来获取ScreenShot
@property(弱,非原子)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;
}
答案 3 :(得分:5)
在iOS7上,如果使用
,可能会出现故障[view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES]
正在进行动画制作。设置afterScreenUpdates = NO
以消除故障。
答案 4 :(得分:0)
确保opaque
设置为NO