2013-02-17 12 views
12

Kiedy prezentuję moje UIViewController z modalPresentationStyle rodzica UINavigationController zestaw do UIModalPresentationCurrentContext The UIViewController nie ślizga się. Nie ma przejściowy stosowany.Nie animacja podczas modalPresentationStyle jest ustawiony na UIModalPresentationCurrentContext

Oto mój kod:

UIViewController *viewController = [[UIViewController alloc] init]; 

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController]; 
navController.navigationBarHidden = YES; 

self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext; 

[self presentViewController:navController animated:YES completion:nil]; 

Kiedy nie ustawić modalPresenttionStyle, wszystko działa bez zarzutu. Ale potrzebuję tego stylu, ponieważ chcę, aby UIViewController był wyświetlany jako nakładka.

BTW: Po zwolnieniu ViewController animacja działa poprawnie.

+0

Czy kiedykolwiek znalazłeś rozwiązanie tego problemu? – Alf

+0

Mam ten sam problem. Czy kiedykolwiek znalazłeś rozwiązanie? –

Odpowiedz

1

Jeśli chcesz UIViewController być przedstawiona jako nakładkę, że nie jest to najlepsze rozwiązanie, ponieważ kiedy robisz: [self presentViewController:navController animated:YES completion:nil]; Robicie modalne prezentacji i nie będzie miał widok kontrolera nadrzędnego poniżej swojej bieżącej. Zamiast tego będziesz miał UIWindow, więc prawdopodobnie będzie tam czarny i to nie jest to czego chcesz.

Aby więc rób co chcesz, musisz zaprezentować swój kontroler jako childViewController i dodać swój pogląd na swojej macierzystej kontrolera widok jak to:

UIViewController *viewController = [[UIViewController alloc] init]; 

[self addChildViewController:viewController]; 
[self viewWillDisappear:animated]; 
[self.view addSubview:viewController.view]; 
[self.view bringSubviewToFront:viewController.view]; 
[viewController didMoveToParentViewController:parentController]; 
[self viewDidDisappear:animated]; 

I usunąć UIViewController:

[controller.view removeFromSuperview]; 
[controller willMoveToParentViewController:nil]; 
[controller.parentViewController viewDidAppear:animated]; 
[controller removeFromParentViewController]; 
+0

To jest złe! Jeśli użyjesz UIModalPresentationCurrentContext podstawowy viewController jest nadal widoczny! Wypróbuj, przedstawiając lekko przezroczysty kontroler viewController! – Alexander

+0

@Alexander Próbowałem tego, co powiedziałeś i nie zadziałało. czy możesz podać kod? Mówię, że przejrzystość mi się nie wydała –

2

Zgodnie z definicją UIViewController.h nagłówka: -

/* Definiuje styl przejścia że będzie użyty dla tego kontrolera widoku, gdy jest prezentowany modalnie. Ustaw tę właściwość na kontrolerze widoku, który ma być prezentowany, a nie na prezencie. Domyślnie jest to UIModalTransitionStyleCoverVertical. */

Należy więc zastosować to na presentingViewController tak: -

UIViewController *viewController = [[UIViewController alloc] init]; 

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController]; 
navController.navigationBarHidden = YES; 

//Here is the change 
navController.modalPresentationStyle = UIModalPresentationCurrentContext; 

[self presentViewController:navController animated:YES completion:nil]; 
1

Jeśli chcesz dodać nakładkę pierwszą rzeczą, którą musisz zrobić, to upewnić się, że używasz nowego przejścia ViewController Interfejsy API systemu iOS 7. Oto krótki samouczek. Gdy skończysz, powinieneś mieć animatora i kontrolkę viewcontroller zgodną z protokołem UIViewControllerTransitioningDelegate.

Następnie, jeśli chcesz przedstawić kontroler, musisz ustawić styl prezentacji modalnej na UIModalPresentationStyleCustom, a nie w CurrentContext. Naturalnie Twój animator będzie musiał skonfigurować ramkę prezentowanego kontrolera, aby nadal można było zobaczyć zawartość pod nim.

Oto kolejny tutorial, który może pomóc - Custom presentations

Ostatni, ale nie najmniej będziesz musiał obsłużyć scenariusz prezentacji w dowolnej orientacji, jeśli nie będzie widać dziwne zachowanie podczas obracania ponieważ pojemnika przejścia pozostaje w portret.Zobacz moją odpowiedź tutaj - transitions in any orientation

1
UIViewController *viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"MyViewController"]; 

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController]; 
navController.navigationBarHidden = YES; 

navController.modalPresentationStyle = UIModalPresentationCurrentContext; 

[self presentViewController:navController animated:YES completion:nil]; 

inicjowania viewController ujęć z identyfikatorem, może pomóc

1

Daj mi znać, jeśli to pomaga, obecny kontroler widok zostanie odwołany w celu animacji, aby rozpocząć.

UIViewController *viewController = [[UIViewController alloc] init]; 

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController]; 
navController.navigationBarHidden = YES; 

self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext; 

[self dismissViewControllerAnimated:YES completion:^{ 
    [self presentViewController:navController animated:YES completion:nil]; 
}]; 
Powiązane problemy