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

Yos*_*ssi 29 iphone xcode screenshot objective-c ios

我正在尝试与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();
Run Code Online (Sandbox Code Playgroud)

它在iOS 6上运行良好,但在iOS 7中,图像看起来很糟糕.我使用了这个答案:iOS:以编程方式制作屏幕截图的最快,最高效的方法是什么? 试图解决它,它有帮助,仍然截图看起来很糟糕.屏幕获得另一种颜色,并且在拍摄的图像上没有显示某些对象(如标签).有帮助吗?

---- ----更新

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

- - 最后更新 - -

这里有很好的答案,并不是真的与我的问题有关..我想让它在iOS7上运行但不使用iOS7 SDK的设备上运行,因为在这一点上,当项目切换项目SDK需要花费很多精力差不多完成了.

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

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

UIGraphicsBeginImageContextWithOptions(imageSize, NO , 0.0f);
Run Code Online (Sandbox Code Playgroud)

代替:

UIGraphicsBeginImageContext(imageSize);
Run Code Online (Sandbox Code Playgroud)

Vin*_*zzz 55

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

  • snapshotViewAfterScreenUpdates: 将视图呈现为具有不可修改的UIView content

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

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

您可以将UIView返回的内容用于任何UI效果,或者将其渲染为图像,就像您需要导出一样.

我不知道这个新方法对你提供的VS有多好(虽然我记得Apple工程师说这个新API效率更高)

  • 我认为,您当前代码的1个问题可能是不考虑规模(是设备Retina?).你可以使用`UIGraphicsBeginImageContextWithOptions(imageSize,NO,0.0)`(最后一个参数是图像的比例,设置0.0确保函数选择设备主屏幕的比例) (3认同)

use*_*474 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;
}
Run Code Online (Sandbox Code Playgroud)


swi*_*Boy 6

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

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

@property(弱,非原子)IBOutlet UIImageView*imageView;

 -(IBAction)takeSnapShot:(id)sender;
Run Code Online (Sandbox Code Playgroud)

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

- (IBAction)takeSnapShot:(id)sender
{
    UIGraphicsBeginImageContext(self.view.bounds.size);
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *snapShotImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    imageView.image = snapShotImage;
}
Run Code Online (Sandbox Code Playgroud)
  1. 以下是我得到的输出.

在此输入图像描述


anc*_*jic 5

在iOS7上,如果使用,可能会出现故障

[view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES]
Run Code Online (Sandbox Code Playgroud)

在动画期间.设置afterScreenUpdates = NO摆脱毛刺.