Подтвердить что ты не робот

Методы моментальных снимков на устройстве iPhone 6 и симуляторе

По какой-то неизвестной причине, похоже, существует возможная ошибка со всеми скриншотами на симуляторе iPhone 6 (и устройстве). Всякий раз, когда я вызываю любой из методов скриншотов, включая:

snapshotViewAfterScreenUpdates: resizableSnapshotViewFromRect: drawViewHierarchyInRect:

с параметром afterScreenUpdates, установленным в YES, экран мерцает. Если установлено значение НЕТ, тогда не происходит мерцания, но я не могу получить нужные мне функции.

Эти методы отлично работают с iOS7.1 и iOS8 во всех других симуляторах, за исключением iPhone 6 и 6+.

Как ни странно, если я начну новый проект с использованием раскадровки и попробую аналогичный код, я не смогу воспроизвести мерцание. Я приложил 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;
}

Любая помощь будет принята с благодарностью!

4b9b3361

Ответ 1

Мы видим эту проблему при запуске следующего кода:

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

Единственное решение, которое мы нашли до сих пор, заключается в том, чтобы убедиться, что приложение имеет изображения запуска размером для iPhone 6 и 6+, а затем мы больше не получаем мерцание.

Ответ 2

Следуя из решения Ryans, я добавил стартовый экран xib (или раскадровку), и это решило проблему на iPhone 6 и 6 плюс.

Поэтому убедитесь, что он установлен в настройках вашего проекта, он должен выглядеть примерно так:

enter image description here

Ответ 3

Кажется, что ошибка на стороне Apple происходит в масштабируемых приложениях (те, у которых нет поддержки дизайна/активов/макетов для iPhone 6/6 +) Это помогло мне преодолеть это: snapshotViewAfterScreenUpdates сбой на iOS 8

В основном использует: [view.layer renderInContext:UIGraphicsGetCurrentContext()];