Doszedłem do SO poszukując bardziej eleganckiego rozwiązania, ale oto jak dotychczas (z powodzeniem) robiłem to do tej pory.
Podstawowa idea:
- NIE używać UINavigationController; zamiast korzystać z jego części składowych (np UINavigationBar) i zrobić samemu
- wywołać NavBar animować równolegle z własnymi niestandardowymi animacjami (lub nie, jeśli chcesz nie anim w ogóle)
wady:
- UINavigationController automatycznie wykonuje inne czynności, takie jak ładowanie/rozładowywanie pamięci. Ponadto jest on "zakodowany" we wszystkich kontrolerach UIView - mają one ZAWSZE odniesienia do kontrolera UINavigationController, który je zawiera. Szkoda wyrzucić to wszystko tylko dlatego, że Apple nie zapewnia haka do ustawiania niestandardowych animacji.
Code - w zależności od tego, klasa bierze odpowiedzialności za animację:
UINavigationItem *backItem = [[UINavigationItem alloc] initWithTitle:@"Back"];
[navigationController.navigationBar pushNavigationItem:backItem animated:TRUE];
// next line only needed if you want a custom back anim too
navigationController.navigationBar.delegate = self;
... jeśli chcesz wyciąć w zwyczaju z tyłu animacji, trzeba tę ostatnią linijkę wyżej, tak że można następnie słuchać paska nawigacyjnego i reagować równolegle, tak jak poniżej:
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item
{
// trigger your custom back animation here
return TRUE;
}
dlaczego chcesz złamać UI z niestandardowego zachowania? –
Nie chodzi o to, że chcę złamać interfejs z niestandardowym zachowaniem. Po prostu nie rozumiem, dlaczego SDK oferuje sterowanie, aby push był animowany, ale nie ma takiej samej kontroli dla popu. Czuję, że to niespójne. –
niestandardowe zachowanie powoduje, że rośniemy :) – Zac