2009-07-28 6 views
2

Mon application dispose d'une vue défilante. Chaque page de la scrollview a une instance d'un contrôleur de vue (buttonViewController) qui affiche une grille de boutons. Si l'utilisateur clique sur l'un des boutons, buttonViewController lance un detailViewController de manière modale, avec une animation définie sur YES.ModalViewController ne s'affiche pas pendant l'animation lorsque le pavé tactile défilant est défilé

Si je visualise la première page (la plus à gauche) ou la vue défilement, tout fonctionne correctement. Toutefois, si vous faites défiler vers l'une des autres pages, l'animation de vue modale (glissant du bas dans ce cas) n'apparaît pas. Au lieu de cela, toute la vue devient noire pendant la même durée que l'animation, puis le contrôleur de vue modale apparaît entièrement affiché. La même chose se produit lors du rejet du contrôleur de vue modale.

Le code est complètement standard. Dans mon buttonViewController j'appelle:

[self presentModalViewController:detailController animated:YES]; 

Le même code fonctionne, peu importe quelle page je regarde (bien que dans différentes instances de buttonViewController bien sûr.)

Comment puis-je commencer le débogage cela?

Répondre

2

Cela peut avoir à voir avec le cadre du detailController ... Lorsque vous êtes dans un UIScrollView, la première page est entre 0 et 320, mais lorsque vous faites défiler les incréments de décalage, donc (en supposant que vous avez des pages en plein écran) la vue suivante sera 320 et 640, la suivante sera dans 640 et (640 + 320), et ainsi de suite. Ainsi, lorsque vous configurez votre detailController avec le cadre CGRectMake (0,0,320,460), lorsque vous êtes dans la première page, l'animation aura l'air bien, mais lorsque vous êtes dans une autre page, l'animation aura lieu à (0,0) et puis je devine que le viewcontroller voit que ce n'est pas l'écran actif et qu'il déplace le contrôleur de vue modal là où se trouve l'écran actif. Si vous initialisez votre cadre comme ceci CGRectMake (320 * pageNumber, 0,320,460), je pense que vous aurez le comportement désiré que vous recherchez. Faites-moi savoir si cela fonctionne im curieux moi-même.

+0

N'a pas l'air de fonctionner. J'ai ajouté: \t \t detailController.view.frame = CGRectMake (320 * self.page, 0,320,460); \t \t ... \t \t [self presentModalViewController: detailController animé: OUI]; Mais cela n'a pas semblé faire la différence. Pour rappel, je n'utilisais pas auparavant initWithFrame, j'utilisais initWithNibName. C'était une bonne idée, merci. –

+0

Êtes-vous sûr que self.page est mis à jour correctement (c'est-à-dire que ce n'est pas toujours 0?) – Daniel

+0

Oui, il est définitivement mis à jour correctement, je l'ai juste vérifié avec une instruction NSLog(). En fait, en réglant le cadre comme indiqué ci-dessus, la vue d'image du contrôleur de détail ne s'affiche pas correctement. –

0

Vous devez insérer un UIView (ou n'importe quel type de vue, par exemple UIScrollView) sous la vue que vous essayez d'animer, pour que l'animation fonctionne correctement. Je suppose que c'est parce que vous fournissez une vue sur laquelle l'animation est basée.

Questions connexes