Les methods d'instantané brisées sur l'appareil et le simulateur de l'iPhone 6

Pour une raison inconnue, il semble y avoir un bug possible avec toutes les methods de capture d'écran sur le simulateur de l'iPhone 6 (et l'appareil). Chaque fois que j'appelle l'une des methods de capture d'écran, y compris:

snapshotViewAfterScreenUpdates: resizableSnapshotViewFromRect: drawViewHierarchyInRect:

Avec afterScreenUpdates défini sur YES, l'écran scintille. Si la valeur est NON, aucun scintillement ne se produit, mais je ne parviens pas à get les fonctionnalités dont j'ai besoin.

Ces methods fonctionnent bien avec iOS7.1 et iOS8 dans tous les autres simulateurs à l'exception de l'iPhone 6 et 6+.

Curieusement, si je démarre un tout nouveau projet en utilisant des storyboards et que j'essaie un code similaire, je ne peux pas reproduire le scintillement. J'ai joint un gif du scintillement en utilisant mon projet non-storyboard:

entrez la description de l'image ici

Et voici le controller de vue très simple:

@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 

Et voici mon AppDelegate juste au cas où:

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

Toute aide serait grandement appréciée!

Nous voyons ce même problème lors de l'exécution du code suivant:

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

La seule solution que nous avons trouvée jusqu'à présent est de nous assurer que l'application a des images de lancement dimensionnées pour l'iPhone 6 et 6+ et que nous n'obtenons plus le scintillement.

Suite à la solution de Ryans, j'ai ajouté un écran de lancement xib (ou storyboard) et cela a résolu le problème sur l'iPhone 6 et 6 plus.

Donc, assurez-vous que vous l'avez défini dans les parameters de votre projet, il devrait finir par ressembler à ceci:

entrez la description de l'image ici

Il semble que ce soit un bug du côté d'Apple qui se produit sur les applications mises à l'échelle (celles qui n'ont pas de support design / assets / layout pour l'iPhone 6/6 +) Celui-ci m'a aidé à le surmonter: snapshotViewAfterScreenUpdates glitch sur iOS 8

Utilise essentiellement: [view.layer renderInContext:UIGraphicsGetCurrentContext()];