Il peut s'agir d'un problème de différence entre les deux vues. Jetez un œil aux attributs de vos vues dans l'IB; as-tu spécifié une barre d'état pour les deux? Ou juste l'un d'eux? Cela pourrait provoquer une différence de décalage vertical et causer des problèmes, je pense.
Vous pouvez peut-être résoudre ce petit problème en réglant vos deux cadres égaux devant le code de transition d'animation:
newViewController.view.frame = self.view.frame;
(Cela devrait également vous permettre de revenir à cache: OUI)
sur une autre question, vous voudrez peut-être envisager d'ajouter la sous-vue sur la fenêtre actuelle au lieu de la position actuelle de la fenêtre en cours, ainsi:
[[self.view superview] addSubview:newViewController.view];
De cette façon, vous pouvez supprimer les appels explicites à tous les événements de la fenêtre. Vous aurez également besoin de lier la transition vers la fenêtre au lieu de la vue actuelle sinon l'animation ne fonctionnera pas:
[UIView setAnimationTransition:transition forView:self.view.superview cache:YES];
je luttais avec des problèmes similaires, et finalement obtenu ce droit. Vous pouvez également essayer d'utiliser des animations de base QuartzCore:
#import <QuartzCore/QuartzCore.h>
// ...
// get the view that's currently showing
UIView *currentView = self.view;
[currentView retain];
// get the the underlying UIWindow, or the view containing the current view
UIView *theWindow = [currentView superview];
UIView *newView = myNewViewController.view;
newView.frame = currentView.frame;
// add subview
[theWindow addSubview:newView];
// set up an animation for the transition between the views
CATransition *animation = [CATransition animation];
[animation setDuration:0.8];
[animation setType:kCATransitionPush];
[animation setSubtype:kCATransitionFromRight];
[animation setTimingFunction:[CAMediaTimingFunction
functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[[theWindow layer] addAnimation:animation forKey:@"SwitchToView1"];
Et pour la transition en arrière, faire la même chose (sauf en sens inverse bien sûr) le remplacement de votre ajouter sous-vue avec:
[self.view removeFromSuperview];
Avec cela le La fenêtre précédente reviendra au premier plan, mais ses événements ne seront pas déclenchés (je ne sais toujours pas pourquoi).J'espère que cela vous permettra de régler les problèmes et aidera beaucoup d'autres personnes.
Pouvez-vous montrer un morceau de code? –
Si j'active le cache: NON Le bouton apparaît pendant la transition mais tout est très lent? Une idée ? –