6

我有一个包含很多文本的视图,所以我想允许用户在单击时隐藏 statusBar+navigationBar。我真的很喜欢图片应用程序中的隐藏样式,其中 statusBar 和 navigationBar 隐藏在一起(不滑动,只是淡出),带有一些动画持续时间,所以我尝试做类似的事情。这是我在 touchesDidBegan 方法中所做的:

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

3 回答 3

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];
于 2013-03-05T05:09:14.417 回答
3

在此查看https://github.com/kirbyt/KTP ​​hotoBrowser 的演示,您会发现如何隐藏和显示状态栏和导航栏。

  • 大多数情况下,您需要使用 NSTimer 设置 4 或 5 秒后自动隐藏隐藏状态栏或导航栏

  • 您还可以使用 Touch Begun 标记此计时器以随机显示或隐藏。

希望它对您完成任务有所帮助。使用 Barack 点查看上述 Github 链接的示例演示。您可以轻松找到隐藏和显示状态栏或导航栏的功能。

于 2013-03-05T05:08:11.220 回答
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];
    }
}]; }

它将同时隐藏状态栏和导航栏。选择UIStatusBarAnimationSlide作为状态栏的动画样式。并更改导航栏的框架。

  1. 隐藏时,隐藏等于NO。我们应该先改变导航栏的框架,然后隐藏导航栏。
  2. 显示时,和隐藏等于YES。我们首先使 navBar 可视化,然后更改框架。
  3. 我们选择UIViewAnimationOptionCurveEaseOut,看起来会更好。
于 2016-02-25T12:35:19.810 回答