2013-02-24 2 views
8

Ich habe eine einzelne Ansicht App und möchte einen neuen ViewController anzeigen, wenn Sie eine Nav-Bar-Taste auf der rechten Seite drücken. Ich nenne diese VC durch diesen Code:presentViewController Animation von Seite

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

Diese Animation jedoch die vc2 in von unten bringt, die nach meiner UI kontraintuitiv erscheinen. Also meine Frage ist:

Wie kann ich meine vc2 von rechts statt unten mit presentViewController erscheinen lassen?

Danke.

Antwort

9

die sauberste ein Navigation zum Schieben und knallen Ansichten zu verwenden wäre ..

, wenn Sie bereits in einem Navigation sind

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

, wenn Sie es nicht sind, passen Sie den Code, in dem Sie Ihre View-Controller wird dem Fenster hinzugefügt. Wenn Ihr VC die rootWindowController ist und Sie verwenden Storyboards nicht, ist dies wahrscheinlich in Ihrem AppDelegate

wenn Sie Storyboards verwenden, passen das Storyboard, so dass Sie in einem Navigationscontroller


ELSE sind, wenn Sie don‘ Ich möchte das aus irgendeinem Grund: :) nur manuell in der 2. VC-Ansicht mit [UIView animate: vc2.view ....]

geschrieben Inline - Methodennamen stimmen nicht überein, aber zeigt allgemeine Vorgehensweise:

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]; 
}]; 

im Abschluss Block der View-Controller vc2 nicht animiert präsentieren, wie Sie bereits haben, dass sich

+0

ein Navigationscontroller nicht btw eine Navigationsleiste zu zeigen, braucht :) –

+0

Nun rufe ich die 'vc2' mit den folgenden: AppDelegate * appDelegate = [[UIApplication sharedApplication] Delegat]; CreateEntryViewController * vc2 = [[CreateEntryViewController alloc] init]; [appDelegate.navController pushViewController: vc2 animiert: TRUE]; Aber ich kann nicht mit dem zurückkehren, was ich dachte, wäre richtig: AppDelegate * appDelegate = [[UIApplication sharedApplication] Delegat]; [appDelegate.navController ablehnenViewControllerAnimated: TRUE Abschluss: Nil]; Irgendwelche Gedanken? –

+0

ja, du willst nicht die vc2 mit der AppDelegate aufrufen - das ist ... komisch - nenne es mit deinem eigenen Navigationscontroller. [die, die vc1 enthält] (vc1.navigationController) –

0

Das half mir,

- (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:^{ 
     }]; 
    }]; 
} 
Verwandte Themen