1

J'adapte une application iPhone existante pour l'utiliser sur l'iPad. Dans la version iPhone, lorsque l'utilisateur tapait sur un bouton de la barre d'outils, je présentais un contrôleur de vue modale avec un modalTransitionStyle de UIModalTransitionStyleFlipHorizontal, ce qui faisait une très belle animation "retournement de carte".Présentation d'un contrôleur de vue modale sur seulement la moitié d'un contrôleur de vue partagée

L'interface iPad est basée sur une vue partagée (MGSplitViewController, actuellement). Le bouton de la barre d'outils se trouve dans le volet de détail, donc lorsque je présente le contrôleur de vue modale, il occupe tout l'écran et la transition de retournement n'a aucun sens.

Pour obtenir la bonne interaction avec l'utilisateur, je souhaite que le contrôleur modal apparaisse et mette en place uniquement sur le contrôleur de vue détaillée, en laissant le contrôleur de vue maître tel quel.

Y at-il un moyen de le faire?

+0

@parilogic Malheureusement, c'est ce que je fais déjà: c'est-à-dire que je présente à partir du contrôleur de vue partagée. Le contrôleur modal couvre toujours tout l'écran. – Bill

+0

Um wait.Vous devez le présenter via l'instance de DetailViewController. – parilogic

+0

Aucun des deux ne fonctionne. J'ai essayé à la fois le contrôleur de vue partagée et le contrôleur de vue détaillée. Les deux prennent l'écran entier. – Bill

Répondre

7
UIViewController *viewController = [[UIViewController alloc] init]; 
viewController.modalPresentationStyle = UIModalPresentationCurrentContext; 

[self presentViewController:viewController animated:YES completion:nil]; 
+0

En fait, j'ai fini par utiliser cette solution et abandonner le flip. Merci! – Bill

+1

Le style de présentation varie selon que vous utilisez iOS 7 ou iOS 8: http://stackoverflow.com/questions/29242286 – Bill

5

Vous pouvez probablement ajouter sa vue en tant que sous-vue de DetailViewcontroller et utiliser l'animation UIview pour la rendre modale. Reference to [UIView transitionFromView:toView:duration:options:completion]

EDIT Lorsque vous regardez la vidéo WWDC2010 (Session 123: Building animation Driven Interfaces), je suis tombé par hasard de savoir que je peux faire la même transition de manière différente. J'échantillon codé et cela a fonctionné :)

Il est d'utiliser une autre API très similaire [UIView transitionWithView:duration:options:animations:completion:]

Mon exemple de code est le suivant

// Within your DetailViewController 
[self.view addSubview:self.flipSideView]; 
[UIView transitionWithView:self.view duration:0.8 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{} completion:nil]; 

Eh oui, c'était. Ajoutez simplement la vue latérale en tant que sous-vue et utilisez l'animation transitionWithView:... au lieu de transitionFromView....

+0

Cela semble prometteur. Laissez-moi essayer. – Bill

+0

Même chose - le contrôleur de vue modale semble toujours s'étendre pour occuper tout l'écran. Il est enveloppé dans un contrôleur de navigation, BTW, mais j'ai besoin du contrôleur de navigation. – Bill

+0

Il semble que UIViewAnimationOptionTransitionFlipFromLeft est le problème - même si je redimensionne le contrôleur de navigation, l'écran entier retourne - pas seulement le contrôleur de détails. – Bill

Questions connexes