SnapshotViewAfterScreenUpdates сбой на iOS 8
Я заметил, что запуск этого режима заставит представление (или главное окно, не уверен) изменить размер на мгновение, при запуске на симуляторе iPhone 6/6 +, масштабированном от макета iPhone 5 (без передачи стартового изображения для iPhone 6/6 +):
[self.view snapshotViewAfterScreenUpdates:YES];
Любая идея, как заставить ее работать, когда вы не можете передать "НЕТ"?
Обновление (13 июля):
Кажется, больше не воспроизводится на iOS 8.4.
Ответы
Ответ 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 +, так как на собственных разрешениях устройства проблема не воспроизводится.