在iPhone 6设备和模拟器上打破的快照方法

时间:2014-09-20 17:10:07

标签: ios objective-c ios8 iphone-6

由于某些未知原因,iPhone 6模拟器(和设备)上的所有屏幕截图方法似乎都存在错误。每当我调用任何截图方法时,包括:

snapshotViewAfterScreenUpdates: resizableSnapshotViewFromRect: drawViewHierarchyInRect:

将afterScreenUpdates设置为YES,屏幕闪烁。如果设置为NO,则不会出现闪烁,但我无法获得所需的功能。

除了iPhone 6和6 +之外,所有其他模拟器中的这些方法都适用于iOS7.1和iOS8。

奇怪的是,如果我使用故事板开始一个全新的项目并尝试类似的代码,我就无法重现闪烁。我使用非故事板项目附加了闪烁的GIF:

enter image description here

这是非常简单的视图控制器:

    @implementation TestSnapshotController

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Snap" style:UIBarButtonItemStylePlain target:self action:@selector(_snap)];

    self.blueView = [UIView new];
    self.blueView.backgroundColor = [UIColor blueColor];
    self.blueView.frame = CGRectMake(100.0f, 100.0f, 100.0f, 100.0f);
    [self.view addSubview:self.blueView];
}

- (void)_snap
{
    [self.blueView snapshotViewAfterScreenUpdates:YES];
}

@end

以下是我的AppDelegate以防万一:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    TestSnapshotController *testVC = [TestSnapshotController new];
    UINavigationController *rootNavVC = [[UINavigationController alloc] initWithRootViewController:testVC];

    self.window.rootViewController = rootNavVC;
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];

    return YES;
}

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:5)

运行以下代码时,我们遇到同样的问题:

[window drawViewHierarchyInRect:window.bounds afterScreenUpdates:YES];

到目前为止,我们发现的唯一解决方案是确保应用程序具有适用于iPhone 6和6+的启动图像,然后我们不再获得闪烁。

答案 1 :(得分:2)

继Ryans解决方案之后,我添加了一个启动屏幕xib(或故事板),这解决了iPhone 6和6 plus上的问题。

因此,请确保在项目设置中设置它,它应该看起来像这样:

enter image description here

答案 2 :(得分:0)

这似乎是苹果方面的一个错误,发生在缩放的应用程序上(那些没有设计/资产/布局支持iPhone 6/6 +) 这个帮助我克服了它: snapshotViewAfterScreenUpdates glitch on iOS 8

基本用途: [view.layer renderInContext:UIGraphicsGetCurrentContext()];