Il y aura une pénalité chaque fois que vous chargez une nouvelle vue, vous pourriez essayer de consolider les écrans en utilisant une vue déroulante ou une disposition différente. En outre, si vous chargez des graphiques inutiles, vous pouvez les supprimer.
Vous pouvez également ajouter chaque vue en tant que sous-vue, auquel cas vous avez entre autres le contrôle sur la durée de l'animation. Ce code va le faire pour vous, même s'il faut se méfier car je l'ai juste écrit et je ne l'ai pas testé (le style de transition et les paramètres booléens peuvent être supprimés car ils ne font rien pour le moment).
UIViewControllerExtendedPresentModalViewController.h
#import <Foundation/Foundation.h>
typedef enum _ExtendedModalTransitionStyle
{
ExtendedModalTransitionStyleTopDown
} ExtendedModalTransitionStyle;
@interface UIViewController (ExtendedPresentModalViewController)
- (void)presentModalViewController: (UIViewController*)modalViewController
withTransitionStyle: (ExtendedModalTransitionStyle)style
animated: (BOOL)animated;
- (void)dismissModalViewController: (UIViewController*)modalViewController
withTransitionStyle: (ExtendedModalTransitionStyle)style
animated: (BOOL)animated;
@end
UIViewControllerExtendedPresentModalViewController.m
#import "UIViewControllerExtendedPresentModalViewController.h"
#import <QuartzCore/QuartzCore.h>
@implementation UIViewController (ExtendedPresentModalViewController)
- (void)presentModalViewController: (UIViewController*)modalViewController
withTransitionStyle: (ExtendedModalTransitionStyle)style
animated: (BOOL)animated
{
[modalViewController retain]; // we'll need this for a little while, hang on to it.
CATransition* transition = [CATransition animation];
[transition setDuration: 0.4];
[transition setTimingFunction:
[CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionLinear]];
[transition setType: kCATransitionMoveIn];
[transition setSubtype: kCATransitionFromBottom];
[[[self view] layer] addAnimation: transition
forKey: nil];
[[self view] addSubview: [modalViewController view]];
}
- (void)dismissModalViewController: (UIViewController*)modalViewController
withTransitionStyle: (ExtendedModalTransitionStyle)style
animated: (BOOL)animated
{
CATransition* transition = [CATransition animation];
[transition setDuration: 0.4];
[transition setTimingFunction:
[CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionLinear]];//kCAMediaTimingFunctionEaseInEaseOut]];
[transition setType: kCATransitionReveal];
[transition setSubtype: kCATransitionFromTop];
[[[[modalViewController view] superview] layer] addAnimation: transition
forKey: nil];
[[modalViewController view] removeFromSuperview];
[modalViewController release]; // all done, we can let this go.
}
@end
Merci, je vais essayer ça. –
Il va augmenter la quantité de gestion que vous aurez à faire, mais pourrait vous donner la vitesse supplémentaire dont vous avez besoin. – jessecurry
Je n'ai pas eu le temps d'essayer ce code spécifique, mais il est évident que je vais devoir faire toutes les transitions moi-même (comme vous le suggérez) au lieu de me fier au comportement normal. –