snapshotViewAfterScreenUpdates iOS 8上的故障

时间:2014-09-16 15:49:51

标签: ios objective-c ios8 iphone-6 ios8.4

我注意到运行这会导致视图(或主窗口,不确定)调整片刻,当在iPhone 6/6 +模拟器上运行时,从iPhone 5布局缩放(不通过iPhone 6/6的启动图像) +):

[self.view snapshotViewAfterScreenUpdates:YES];

当你不能在那里传递'NO'时,有什么想法让它发挥作用吗?

更新(7月13日):
似乎不再在iOS 8.4上重现了。

3 个答案:

答案 0 :(得分:13)

由于它看起来像Apple / API问题,我只是决定在我需要传递" YES时不使用该方法。"

您可以截取视图的截图(UIImage)并将其放在UIImageView中,以充当" UIView"你曾经从快照方法中获得。

这是代码的链接: How to capture UIView to UIImage without loss of quality on retina display

#import <QuartzCore/QuartzCore.h>

+ (UIImage *) imageWithView:(UIView *)view
{
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];

    UIImage * img = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return img;
}

答案 1 :(得分:3)

我刚遇到这个问题。

原因是我没有适合iPhone 6或6 plus的发布图像。 我看到的另一个问题是因为这个不存在的图像,当我问这样的屏幕尺寸时,我得到了iPhone 5的尺寸:

CGSize screenSize = [[UIScreen mainScreen] bounds].size;

当我修复这些图像时,此问题已修复。

P.S - 无论您使用资产目录还是nib文件作为启动图像,它都应该有效。 在资产目录中,你应该在iOS 8及更高版本的右侧添加'V'(属性检查器),并为' Retina HD 5.5 '(6加)和'设置图像Retina HD 4.7 '(适用于iPhone 6)

答案 2 :(得分:1)

似乎@anon和@PJC是正确的,这是一个UIKit的错误。它有时可以由[view.layer renderInContext:UIGraphicsGetCurrentContext()]

设定

此时我通过手动调整iPhone 6/6 +的布局解决了我自己的问题,因为在本机设备分辨率上问题无法重现。