2014-09-16 5 views
21

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

[self.view snapshotViewAfterScreenUpdates:YES]; 

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

Update (13 июля):
Не похоже, чтобы воспроизвести на прошивкой 8.4 больше.

+0

Имейте такую ​​же проблему, сообщите мне, если вы решили решение. – kgaidis

+0

К сожалению, это была ошибка на некоторое время. Это также влияет на iOS 7 (когда вы запускаете приложение для iPhone на iPad). См. Здесь: http://openradar.io/15909891 – PJC

+0

@anon Я закончил настройку макетов для iPhone 6/6 +. На собственных разрешениях устройств проблема не воспроизводится –

ответ

13

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

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

Вот ссылка на код: How to capture UIView to UIImage without loss of quality on retina display

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

К сожалению, это не сработает. Он делает то же самое, что передавать «НЕТ» в качестве параметра snapshotViewAfterScreenUpdates - это не то, что пытается сделать @Dannie P. – PJC

+0

Я не согласен, потому что передача «НЕТ» не делала то же самое, что снимать снимок с использованием UIImage. Передача «НЕТ» дала мне пустой обзор. Невозможно узнать, делает ли он то же самое, не видя кода. Я согласен, что это не полная замена. Я должен был внести некоторые коррективы в мой автозапуск в IB, чтобы сделать меньшую корректировку во время загрузки представления, потому что моментальный снимок UIImage берет его, прежде чем ограничения будут правильно настроены. – kgaidis

+0

Я имел в виду, что когда вы передаете «НЕТ», последние изменения не учитываются в представлении, и это то же самое, когда вы просто захватываете. Возможность интеграции последних изменений в захват иногда очень важна, например. когда вы используете это внутри пользовательского перехода (animateTransition ...). – PJC

1

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

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

3

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

Причина в том, что у меня не было изображений запуска, подходящих для 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)

+1

Я не понимаю, почему это не принятый ответ. Теперь он работает как шарм! Спасибо – DZenBot

+0

DZenBot, первоначальной целью было заставить его работать с iPhone 5-й макет на iPhone 6 (масштабированный режим). Причиной этого было необходимость иметь обходное решение до того, как ограничения макета были исправлены для поддержки больших размеров iPhone. –

Смежные вопросы