Ainsi, après la première poussée par M. Simon Holroyd et quelques recherches, j'ai trouvé la solution de la façon d'atteindre cet "effet" de la fonctionnalité. C'est le code:
statusbarView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 20)];
EDIT: monsieur pcholberg correctement a souligné que l'ancien code ne fonctionne pas sur le réel de l'appareil, uniquement sur le Simulateur iOS, donc j'ai édité, par sa recommandation
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
{
UIView *screenShot = [[UIScreen mainScreen] snapshotViewAfterScreenUpdates:NO];
[statusbarView addSubview:screenShot];
[statusbarView setClipsToBounds:YES];
[self.view addSubview:statusbarView];
[self setPrefersStatusBarHidden:YES];
[self prefersStatusBarHidden];
[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
}
...
- (BOOL)prefersStatusBarHidden
{
return prefersStatusBarHidden;
}
...
Donc, la première partie crée contexte, utilise la méthode Simon mentionné, attire la vue avec la barre de statut, et l'enregistre comme un UIImage
La deuxième partie ajoute que l'instantané UIView
de mon viewController de l' UIView
Et la troisième partie définit mon bool pour la barre d'état pour OUI (pour une utilisation plus facile dans la méthode ci-dessus), et les appels de méthodes pour redessiner il
Cela définit alors la UIView comme non-fonctionnelle de la barre d'état à sa place et se cache celui d'origine, donc il n'y a pas de double-rendu. Alors je peux utiliser ce point de vue dans mon [UIView animateWithDuration...
méthode
Et quand je reviens, j'utilise ce code dans le gestionnaire d'achèvement du bloc d'animation:
[statusbarView removeFromSuperview];
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
{
[self setPrefersStatusBarHidden:NO];
[self prefersStatusBarHidden];
[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
}
Et voilá! Cela fonctionne comme le décrit effet dans ma question.
Espérons que cela aide quelqu'un!