Il semble que les menus latéraux deviennent un élément d'interface de plus en plus courant à mesure que les applications iPhone contiennent de plus en plus d'informations. Facebook l'a inclus dans sa dernière version et la nouvelle application Gmail semble l'inclure également . Je me demandais si quelqu'un avait des idées sur la manière la plus efficace de développer quelque chose de ce genre, car cela devient un élément d'interface de plus en plus courant. Bien que j'aie mes propres idées sur la façon de construire ce système, je suis curieux d'entendre ce que d'autres personnes pensent.
Réponses
Trop de publicités?Il y a une grande bibliothèque pour cela par Tom Adriaenssen : Inferis/ViewDeck
Il est très facile à utiliser et a un public assez large.
EDITAR:
Pour quelque chose d'un peu plus léger, allez voir : mutualmobile/MMDrawerController
Il ne dispose pas de toutes les fonctionnalités de ViewDeck mais est plus simple à modifier et à étendre.
J'ai créé une bibliothèque pour cela. Elle s'appelle MFSideMenu .
Il prend notamment en charge les formats iphone+ipad, portrait+paysage, le menu à gauche ou à droite, le contrôleur UITabBarController et les gestes de panoramique.
El idée clé que vous devez définir le cadre ou le centre de la vue de self.navigationController.view . Il y a deux événements que vous devez gérer. (1) barButtonItem press . (2) geste de panique à cause du swiping.
Vous pouvez envoyer le contrôleur de vue en arrière-plan comme ceci :
[self.view sendSubviewToBack:menuViewController.view];
- (void)viewDidLoad
{
[super viewDidLoad];
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(buttonPressed:)];
UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
[self.navigationController.view addGestureRecognizer:panGestureRecognizer];
self.navigationItem.leftBarButtonItem = barButtonItem;
}
- (void)buttonPressed:(id)sender {
CGRect destination = self.navigationController.view.frame;
if (destination.origin.x > 0) {
destination.origin.x = 0;
} else {
destination.origin.x = 320;
}
[UIView animateWithDuration:0.25 animations:^{
self.navigationController.view.frame = destination;
}];
}
- (void)handlePan:(UIPanGestureRecognizer *)recognizer
{
static CGPoint originalCenter;
if (recognizer.state == UIGestureRecognizerStateBegan)
{
originalCenter = recognizer.view.center;
} else if (recognizer.state == UIGestureRecognizerStateChanged)
{
CGPoint translation = [recognizer translationInView:self.view];
recognizer.view.center = CGPointMake(originalCenter.x + translation.x, originalCenter.y);
}
else if (recognizer.state == UIGestureRecognizerStateEnded || recognizer.state == UIGestureRecognizerStateCancelled || recognizer.state == UIGestureRecognizerStateFailed)
{
if (recognizer.view.frame.origin.x < 160) {
[UIView animateWithDuration:0.25 animations:^{
recognizer.view.center = CGPointMake(384, 487.5);
}];
} else {
[UIView animateWithDuration:0.25 animations:^{
recognizer.view.center = CGPointMake(384 + 320, 487.5);
}];
}
}
}