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

SnapshotViewAfterScreenUpdates сбой на iOS 8

Я заметил, что запуск этого режима заставит представление (или главное окно, не уверен) изменить размер на мгновение, при запуске на симуляторе iPhone 6/6 +, масштабированном от макета iPhone 5 (без передачи стартового изображения для iPhone 6/6 +):

[self.view snapshotViewAfterScreenUpdates:YES];

Любая идея, как заставить ее работать, когда вы не можете передать "НЕТ"?

Обновление (13 июля):
Кажется, больше не воспроизводится на iOS 8.4.

4b9b3361

Ответ 1

Поскольку это казалось проблемой Apple/API, я просто решил не использовать этот метод, когда мне нужно передать "YES".

Вы можете просто сделать снимок экрана (UIImage) своего представления и поместить его в UIImageView, чтобы действовать как "UIView", который вы использовали для получения моментального снимка.

Здесь ссылка на код: Как захватить UIView в UIImage без потери качества на экране сетчатки

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

Ответ 2

У меня была эта проблема.

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

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

Когда я исправил эти изображения, эта проблема была исправлена.

P.S - он должен работать независимо от того, используете ли вы каталог ресурсов или файл nib для образа запуска. В каталоге активов вы должны добавить "V" в правой части (Attributes Inspector) под iOS 8 и более поздними версиями и установить изображения для " Retina HD 5.5" (для 6 плюс) и " Retina HD 4.7 '(для iPhone 6)

Ответ 3

Кажется, что @anon и @PJC являются правильными, и это ошибка UIKit. Иногда это может быть обмануто [view.layer renderInContext:UIGraphicsGetCurrentContext()]

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