2013-03-05 103 views
6

我有一個很多文字的視圖,所以我想讓用戶在單擊時隱藏statusBar + navigationBar。我非常喜歡Pictures應用中的隱藏風格,其中statusBar和navigationBar隱藏在一起(不滑動,只是淡出),以及一些animationDuration,所以我試圖做這樣的事情。這裏是我在touchDidBegan方法中做的:同時隱藏狀態欄和導航欄,如圖片應用

- (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. 
} 

但是這並不能同時隱藏酒吧。它使他們滑下來。它具有與該型式的方法的上述同樣的效果:

- (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. 
} 

如果我甩掉的UIView動畫和隱藏,沒有動畫吧,他們確實隱藏和同時出現的,但過快。我可能會走錯方向。如果有人能幫我解決這個問題,我將不勝感激。

編輯:得到了它的工作

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

回答

3

檢查這個演示的https://github.com/kirbyt/KTPhotoBrowser在此找到如何隱藏和顯示狀態欄和導航欄。

  • 主要是你需要使用的NSTimer的後4或5秒Hidding狀態欄或導航條

  • 設置自動隱藏,您還可以使用觸摸開始顯現或隱藏隨機標記該定時器。

希望它的幫助你做你的任務。使用Barack點檢查上述Github鏈接的示例演示。您可以輕鬆找到隱藏的功能並顯示狀態欄或導航欄。

+0

我通過自己的SRC看了一下,發現隱藏/顯示處理方法中的src/KTPhotoBrowser/KTPhotoScrollViewController.m 他們也換了狀態欄和導航欄隱藏到UIView的動畫。但是,不是將navigationBarHidden設置爲YES,而是將navigationBar的alpha值從1.0更改爲0.0。只需要保持navigationBar.transulent = YES。我猜setNavigationBarHidden:animated:方法啓用自己的動畫時,包裝到UIView動畫(導致異步bw statusbar和navigationBar)。不過謝謝。 – AzaFromKaza 2013-03-05 05:57:33

+0

做得好我的朋友,你很好! – 2013-03-05 06:03:27

4

對於隱藏UIStatusBar動畫:

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

對於隱藏UINavigationBar動畫:

[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

你的代碼唯一的區別是你使用的是UINavigationBar的動畫。仍然,同樣的效果。另外,我想讓狀態欄和導航欄隱藏/顯示沒有幻燈片。 – AzaFromKaza 2013-03-05 05:39:23

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

它會隱藏狀態欄和導航欄simultaneously.choose UIStatusBarAnimationSlide的狀態欄的動畫風格。並改變navBar的框架。

  1. 時hidding,和隱藏等於NO。我們應該首先更改navBar的框架,然後隱藏navBar。
  2. 顯示時,和隱藏等於。我們首先製作navBar視覺,然後改變框架。
  3. 我們選擇UIViewAnimationOptionCurveEaseOut,它會看起來更好。