Mam widok z dużą ilością tekstu, więc chcę pozwolić użytkownikowi na ukrycie statusu Pasek + nawigacja Pasek na jednym stuknięciu. Bardzo podoba mi się styl ukrywania się w aplikacji Zdjęcia, gdzie statusBar i navigationBar chowają się razem (nie ślizgają się, po prostu gasną), z pewną animacjąDuration, więc starałem się zrobić coś takiego. Oto, co robię w dotyku MetodaDidBegan:jednocześnie ukryj pasek stanu i pasek nawigacyjny, podobnie jak w aplikacji Zdjęcia
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent];
[UIView setAnimationDuration:0.5];
[UIView beginAnimations:@"" context:nil];
[[UIApplication sharedApplication] setStatusBarHidden:!([UIApplication sharedApplication].statusBarHidden) withAnimation:UIStatusBarAnimationNone];
[self.navigationController setNavigationBarHidden:(!self.navigationController.navigationBarHidden) animated:NO];
[UIView commitAnimations];
self.navigationController.navigationBar.translucent = !self.navigationController.navigationBar.translucent; // this is needed to make bars appear on top of my view.
}
Ale to nie powoduje jednoczesnego ukrycia prętów. To sprawia, że zsuwają się. Jest to ten sam efekt, jak tej wersji metody powyżej:
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent];
// deleted UIView animation, changed animation type to "slide"
[[UIApplication sharedApplication] setStatusBarHidden:!([UIApplication sharedApplication].statusBarHidden) withAnimation:UIStatusBarAnimationSlide];
// enabled animation for navBar
[self.navigationController setNavigationBarHidden:(!self.navigationController.navigationBarHidden) animated:YES];
self.navigationController.navigationBar.translucent = !self.navigationController.navigationBar.translucent; // this is needed to make bars appear on top of my view.
}
Gdybym pozbyć animacji UIView i ukrywanie pasków bez żadnych animacji, oni ukrywają i pojawiają się jednocześnie, ale zbyt szybko. Może idę w złym kierunku. Byłbym wdzięczny, gdyby ktoś mógł mi w tym pomóc.
Edit: got to działa
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// don't forget to set navigationBar.translucent to YES
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent];
[UINavigationBar setAnimationDuration:3.0];
[UINavigationBar beginAnimations:@"" context:nil];
[[UIApplication sharedApplication] setStatusBarHidden:!([UIApplication sharedApplication].statusBarHidden) withAnimation:NO];
if ([UIApplication sharedApplication].isStatusBarHidden)
[self.navigationController.navigationBar setAlpha:0.0];
else [self.navigationController.navigationBar setAlpha:1.0];
[UINavigationBar commitAnimations];
}
Przejrzałem ich src i znalazł/pojawiają metodę uchwytu hide w src/KTPhotoBrowser/KTPhotoScrollViewController.m też owinąć pasek stanu i pasek nawigacji ukrywanie w animacji UIView.Ale zamiast ustawiania navigationBarHidden na YES, zmieniają tylko wartość alfa navigationBar z 1,0 na 0,0. Wystarczy zachować wartość navigationBar.transulent = YES. Domyślam się, że setNavigationBarHidden: animated: method włącza swoją własną animację po zawinięciu do animacji UIView (która spowodowała asynchroniczność bw pasek stanu i pasek nawigacyjny). W każdym razie dzięki. – AzaFromKaza
Dobra robota, przyjacielu, i dobrze przyjdź! –