Présentez un UIViewController modal transparent
Je suis en train de faire un custom alertView (pour iOS7+) sur mon propre mais j'ai du mal avec le alertView présentation.
J'ai un UIViewController avec un fond noir (alpha fixé à 0,25 f), et un alertView comme sous-vue.
Quand je veux afficher la alertView, je vous présente modal le viewController:
-(void) show
{
UIWindow* window = [[UIApplication sharedApplication] keyWindow];
self.modalTransitionStyle = UIModalPresentationCustom;
self.transitioningDelegate = self;
[window.rootViewController presentViewController:self animated:YES completion:nil];
}
Et voici mon animateur de l'objet:
-(NSTimeInterval) transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext
{
NSLog(@"%s",__PRETTY_FUNCTION__);
return 2;
}
-(void) animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
NSLog(@"%s",__PRETTY_FUNCTION__);
UIView* toView = [transitionContext viewForKey:UITransitionContextToViewKey];
toView.alpha = 0;
UIView* container = [transitionContext containerView];
[container addSubview:toView];
[UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
toView.alpha = 0.5;
} completion:^(BOOL finished) {
[transitionContext completeTransition:YES];
}];
}
La chose est: le modal VC est en train de disparaître avec la présentation de la VC en arrière-plan comme sa censés faire, mais lorsque l'animation se termine la présentation de VC est retiré de l'arrière-plan.
Si je l'appelle [transitionContext completeTransition:YES];
au lieu de cela, la présentation de VC est en arrière-plan, mais le modal VC est retiré à la fin de l'animation, donc je suppose que le contexte annule la présentation si nous envoyons un "NON".
Est-il un moyen de garder la présentation de la VC en arrière-plan, sans avoir à faire un bilan et de définir comme arrière-plan de la modale de VC en vue?
source d'informationauteur Imotep
Vous devez vous connecter pour publier un commentaire.
J'ai essayé cette solution et cela fonctionne sur iOS 7 et 8:
Remarque: Être conscient de la différence entre "presentingViewController " et " presentedViewController'.
iOS8+
Pour iOS8+ vous pouvez utiliser le code ci-dessous extrait de
Mon cas peut différer de la vôtre, mais l'information peut être utile pour la conversation.
Dans le Storyboard, j'ai changé mon segue la Présentation de l'état "Sur Plein Écran" et il a fait le tour.
Je pense que ce que vous voyez est le comportement par défaut d'iOS.
Afficher les contrôleurs ne sont pas censés être non-opaque lorsqu'il est présenté comme modale de vue des contrôleurs. iOS supprime le sous-tendre-vue-contrôleur lorsque l'animation est terminée, afin d'accélérer la composition lors de la présentation-vue-contrôleur est censé prendre la totalité de l'écran. Il n'y a aucune raison pour dessiner une-vue-contrôleur - qui peut être complexe de vue de la hiérarchie - quand il n'est même pas visible à l'écran.
Je pense que votre seule solution est de faire une présentation personnalisée.
Remarque: je n'ai pas tester cette. Mais il va quelque chose comme ceci.
Cela vous laisse pas d'autre choix que d'utiliser les présenter de vue de la logique du contrôleur de construire en
UIViewController
. Vous aurez besoin de comprendre vous-même, lorsque la vue-contrôleur est fait, et puis en sens inverse de l'animation et de supprimer lesUIWindow
de l'écran.Le ViewController n'est pas censé être transparent lorsque vous les présenter ou de les pousser. Vous pouvez essayer de l'ajouter en tant que sous-vue. Et pour l'effet de transition de changer son image immédiatement après l'ajout d'un sous-vue. Faire de son image quelque part à l'extérieur de l'affichage visible et puis d'animer un changement de cadre d'affichage visible.
Espère que cette aide.
Pour votre information,
J'ai enfin fait mon custom alertView une sous-classe de UIView pour le "popUp".
Pour le montrer, je viens d'ajouter le alertView comme sous-vue de la keyWindow avec les contraintes du centre, et d'un noir transparent à l'arrière-plan de la vue derrière elle.
Que ce n'est pas un contrôleur, je dois gérer l'INTERFACE utilisateur de rotation par moi-même (uniquement pour iOS 7, il tourne bien avec l'INTERFACE utilisateur d'iOS 8).