2014-09-20 6 views
18

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

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

ответ

5

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

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

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

2

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

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

enter image description here

0

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

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

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