2013-03-05 8 views
6

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

Odpowiedz

3

czek to demo https://github.com/kirbyt/KTPhotoBrowser w to znaleźć sposób, aby ukryć i pokazać pasek stanu i pasek nawigacji.

  • przeważnie trzeba użyć NSTimer na ustawienie Auto Hide po 4 lub 5 sekund Hidding Statusbar lub pasek nawigacji

  • można również określili ten czasomierz używając wybierania zaczęły pokazywać lub ukrywać losowo.

Mam nadzieję, że pomoże ci w wykonaniu zadania. sprawdź przykładowe demo powyższego linku Github używając Punktu Barack. możesz łatwo znaleźć funkcję ukrywania i pokazać pasek stanu lub pasek nawigacyjny.

+0

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

+0

Dobra robota, przyjacielu, i dobrze przyjdź! –

4

Dla ukrycia UIStatusBar z animacją:

[[UIApplication sharedApplication] setStatusBarHidden: YES withAnimation: UIStatusBarAnimationSlide]; 

Dla ukrycia UINavigationBar z animacją:

[UINavigationBar beginAnimations:@"NavBarFade" context:nil]; 
self.navigationController.navigationBar.alpha = 1; 
[self.navigationController setNavigationBarHidden:YES animated:NO]; //Animated must be NO! 
[UINavigationBar setAnimationCurve:UIViewAnimationCurveEaseIn]; 
[UINavigationBar setAnimationDuration:1.5]; 
self.navigationController.navigationBar.alpha = 0; 
[UINavigationBar commitAnimations]; 
+0

Jedyna różnica w kodzie polega na tym, że używasz animacji UINavigationBar. Wciąż ten sam efekt. Ponadto chcę, aby pasek stanu i pasek nawigacji były ukryte/wyświetlane bez slajdu. – AzaFromKaza

0
- (void)toggleStatusBarAndNavBar:(BOOL)hidden { 

UINavigationBar *navBar = self.navigationController.navigationBar; 
[[UIApplication sharedApplication] setStatusBarHidden:hidden withAnimation:UIStatusBarAnimationSlide]; 

[UIView animateWithDuration:0.35 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ 
    // 先显示navigationBar 
    if (!hidden) 
    { 
     [self.navigationController setNavigationBarHidden:hidden animated:NO]; 
    } 

    navBar.frame = CGRectMake(navBar.frame.origin.x, 
           hidden ? -navBar.frame.size.height : 20, 
           navBar.frame.size.width, 
           navBar.frame.size.height); 
} completion:^(BOOL finished) { 
    if (hidden) 
    { 
     [self.navigationController setNavigationBarHidden:hidden animated:NO]; 
    } 
}]; } 

Będzie ukryć pasek stanu i navigationbar simultaneously.choose UIStatusBarAnimationSlide dla animacji stylu StatusBar użytkownika. I zmień ramę NavBar.

  1. gdy ukrywanie i ukryty równą NO. powinniśmy najpierw zmienić ramkę navBar, a następnie uczynić navBar ukrytym.
  2. przy wyświetlaniu i ukryte jest równe TAK. najpierw wykonujemy navBar visual, a następnie zmieniamy ramkę.
  3. Wybraliśmy UIViewAnimationOptionCurveEaseOut, będzie wyglądać lepiej.