2013-02-24 15 views
8

Mam jedną aplikację widokową i chcę pokazać nowy ViewController po naciśnięciu przycisku paska nawigacji po prawej stronie. Ja nazywam to VC przez ten kod:presentViewController Animacja od strony

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

Ta animacja, jednak przynosi vc2 z dołu co wydaje się sprzeczne z intuicją według mojego UI. Więc moje pytanie brzmi:

Jak mogę wyświetlić mój vc2 z prawej zamiast z dołu za pomocą presentViewController?

Dzięki.

Odpowiedz

9

najczystsze byłoby użyć navigationController za popychanie i popping widoki ..

jeśli jesteś już w NavigationController

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

jeśli nie są, dostosować kod gdzie kontroler widoku zostanie dodane do okna. Jeśli VC jest rootWindowController i nie używasz scenorysów, to prawdopodobnie w AppDelegate

jeśli używasz storyboardy, dostosowania storyboard więc jesteś w środku kontrolera nawigacyjnego


indziej, a jeśli don” t chcesz to z jakiegokolwiek powodu: :) po prostu ręcznie animuj w widoku 2. VC za pomocą [UIView animate: vc2.view ....]

napisane inline - nazwy metod nie pasują, ale pokazuje ogólne podejście:

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

w bloku zakończenia przedstawić vc2 widok kontroler nieanimowane jak już to zrobiłeś sobie

+0

kontroler nawigacyjny nie musi pokazać pasek nawigacyjny btw :) –

+0

Teraz nazywam 'vc2' następującym: AppDelegate * appDelegate = [[UIApplication sharedApplication] delegate]; CreateEntryViewController * vc2 = [[createEntryViewController alloc] init]; [appDelegate.navController pushViewController: animacja vc2: TRUE]; Ale nie mogę wrócić z poprawnym zdaniem: AppDelegate * appDelegate = [[UIApplication sharedApplication] delegat]; [appDelegate.navController dismissViewControllerAnimated: PRAWDA realizacja: nil]; Jakieś myśli? –

+0

tak, nie chcesz wywoływać vc2 z appDelegate - to jest .... dziwne - wywołaj to używając kontrolera nawigacyjnego OWN. [ten, który zawiera vc1] (vc1.navigationController) –

0

To pomogło mi

- (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:^{ 
     }]; 
    }]; 
} 
Powiązane problemy