Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios iPhone 6设备和模拟器上的快照方法_Ios_Objective C_Ios8_Iphone 6 - Fatal编程技术网

Ios iPhone 6设备和模拟器上的快照方法

Ios iPhone 6设备和模拟器上的快照方法,ios,objective-c,ios8,iphone-6,Ios,Objective C,Ios8,Iphone 6,出于某种未知的原因,iPhone 6模拟器(和设备)上的所有截图方法似乎都有可能出现错误。无论何时调用任何屏幕截图方法,包括: 快照视图后屏幕更新: 可调整大小的NapshotViewFromRect: drawViewHierarchyInRect: 当AfterScreenUpdate设置为YES时,屏幕闪烁。如果设置为否,则不会出现闪烁,但我无法获得所需的功能 除了iphone6和6+之外,这些方法在所有其他模拟器中都可以很好地与iOS7.1和iOS8配合使用 奇怪的是,如果我用故事板开始

出于某种未知的原因,iPhone 6模拟器(和设备)上的所有截图方法似乎都有可能出现错误。无论何时调用任何屏幕截图方法,包括:

快照视图后屏幕更新: 可调整大小的NapshotViewFromRect: drawViewHierarchyInRect:

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

除了iphone6和6+之外,这些方法在所有其他模拟器中都可以很好地与iOS7.1和iOS8配合使用

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

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

    @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;
}

任何帮助都将不胜感激

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

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

到目前为止,我们找到的唯一解决方案是确保应用程序具有针对iPhone 6和6+的启动图像大小,这样我们就不会再出现闪烁。

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

因此,请确保在项目设置中设置了它,它的最终外观应如下所示:


这似乎是苹果方面的一个缺陷,发生在规模化的应用程序上(那些没有iPhone 6/6+的设计/资产/布局支持的应用程序) 这一次帮助我克服了它:

主要用途:
[view.layer renderContext:UIGraphicsGetCurrentContext()]