6

多くのテキストを含むビューがあるため、ユーザーがシングルタップで statusBar+navigationBar を非表示にできるようにしたいと考えています。statusBar と navigationBar が一緒に非表示 (スライドせず、フェードアウトするだけ) で、いくつかの animationDuration がある Pictures アプリの非表示スタイルが本当に好きなので、そのようなことをしようとしました。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のこのデモを確認してください。ステータスバーとナビゲーション バーを非表示および表示する方法がわかります。

  • ほとんどの場合、4 または 5 秒後に自動非表示を設定するために NSTimer を使用する必要があります。ステータスバーまたはナビゲーション バーを非表示にします。

  • Touch Begun を使用してこのタイマーにタグを付けて、ランダムに表示または非表示にすることもできます。

あなたの仕事をするための助けになることを願っています。上記の Github リンクの Sample Demo を Barack point を使用して確認してください。ステータスバーまたはナビゲーションバーの非表示と表示の機能を簡単に見つけることができます。

于 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を選択します。そして、navBar のフレームを変更します。

  1. 非表示の場合、非表示はNOです。最初に navBar のフレームを変更してから、navBar を非表示にします。
  2. を表示する場合、および非表示の場合はYESに等しくなります。最初に navBar を視覚化してから、フレームを変更します。
  3. UIViewAnimationOptionCurveEaseOutを選択すると、見た目が良くなります。
于 2016-02-25T12:35:19.810 に答える