2013-02-24 17 views
8

Ho una singola vista App e voglio mostrare un nuovo ViewController quando si preme un pulsante della barra di navigazione nella parte destra. Chiamo questo VC da questo codice:presentView Animazione controllore dal lato

- (IBAction)createEntryButton:(id)sender { 
    CreateEntryViewController *vc2 = [[CreateEntryViewController alloc] init]; 
    [self presentViewController:vc2 animated:TRUE completion:nil]; 
} 

Questa animazione, tuttavia, porta la vc2 dalla parte inferiore che sembra controintuitivo secondo la mia UI. Quindi la mia domanda è:

Come posso far apparire il mio vc2 da destra anziché dal basso con presentViewController?

Grazie.

risposta

9

il più pulito potrebbe essere quella di utilizzare un navigationController per spingere e popping vista ..

se sei già in una navigationController

[self.navigationCtroller pushViewController:vc2 animated:TRUE completion:nil] 

se non siete, adattare il codice in cui il controller della vista viene aggiunto alla finestra. Se il VC è il rootWindowController e non si utilizza storyboarding, questo è probabile che nel vostro AppDelegate

se si utilizza storyboard, adattare lo storyboard in modo che siano all'interno di un controller di navigazione


ELSE se si don' t desidera che per qualsiasi motivo: :) animare manualmente nella visualizzazione di 2. VC utilizzando [UIView animate: vc2.view ....]

scritto in linea - i nomi dei metodi non corrispondono ma mostrano un approccio generale:

UIView *v = vc2.view; 
CGRect f = v.frame; 
f.origin.x += self.view.frame.size.width; //move to right 

v.frame = f; 

[UIView animateWithDuration:0.5 animations:^{ 
    v.frame = self.view.frame; 
} completion:^(BOOL finished) { 
    [self presentViewController:vc2 animated:NO completion:nil]; 
}]; 

nel blocco di completamento presentare il VC2 vista del regolatore non animato, come avete già fatto che voi stessi

+0

un controller di navigazione non ha bisogno di mostrare una barra di navigazione btw :) –

+0

Ora chiamo 'vc2' con il seguente: AppDelegate * appDelegate = [[UIApplication sharedApplication] delegate]; CreateEntryViewController * vc2 = [[CreateEntryViewController alloc] init]; [appDelegate.navController pushViewController: vc2 animated: TRUE]; Ma non posso tornare con quello che pensavo sarebbe corretto: AppDelegate * appDelegate = [[UIApplication sharedApplication] delegate]; [appDelegate.navController dismissViewControllerAnimated: TRUE completion: nil]; Qualche idea? –

+0

sì, non si vuole chiamare la vc2 con l'appDelegate - questo è ... strano - chiamalo usando il tuo controller di navigazione PROPRIO. [quello che contiene vc1] (vc1.navigationController) –

0

Questo mi ha aiutato,

- (void)presentNewViewController{ 
    NewViewController *objNewViewController =[[NewViewController alloc]initWithNibName:@"NewViewController" bundle:nil]; 

    UIView *tempNewVCView = [UIView new]; 
    tempNewVCView = objNewViewController.view; 
    tempNewVCView.frame = self.view.frame; 

    CGRect initialFrame = self.view.frame; 
    initialFrame.origin.x = self.view.frame.size.width; 

    tempNewVCView.frame = initialFrame; 

    [self.view addSubview:tempNewVCView]; 

    [UIView animateWithDuration:0.3 animations:^{ 
     tempNewVCView.frame = self.view.frame; 
    } completion:^(BOOL finished) { 
     [self presentViewController:objNewViewController animated:NO completion:^{ 
     }]; 
    }]; 
} 
Problemi correlati