2

ルートView Controllerでナビゲーションバーが表示されないようにアプリを動作させようとしています.別のView Controllerをスタックにプッシュすると(Storyboardセグエを使用)、ナビゲーションバーがアニメーション表示されます(ビューにスライドを表示します)。

他の SO 記事で推奨されているように、ルート コントローラーには次のものがあります。

- (void)viewWillAppear:(BOOL)animated
{
    [self.navigationController setNavigationBarHidden:YES animated:animated];
    [super viewWillAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [self.navigationController setNavigationBarHidden:NO animated:YES];
    [super viewWillDisappear:animated];
}

ナビゲーション バーは正しく表示/非表示になりますが、アニメーション化 (フェード イン/アウト) しません。

私は黒い半透明のバーを使用していますが、すべてのタイプのバーを試しましたが、違いはありません。これはiPhoneアプリにあります。シミュレーターと非シミュレーターも試しました。何か案は?

私のアプリが何をしているかのデモンストレーションを示すビデオを作成しました。

http://youtu.be/B9fuCc2Jqtg

明確にするために、それは適切に現れたり消えたりしていますが、それは突然起こります. この移行中にフェードイン/フェードアウトさせようとしています。

Xcode 4 / iOS 5.1 のデモ プロジェクトへのリンクを追加しました。

https://www.dropbox.com/sh/mwsgjyup4iumy2r/QNN7xkHXSt

更新/回答:最終的に、私のコードは「機能している」ことが判明しました。つまり、Apple が意図したことを実行しており、ナビゲーション バーがスライドして表示されます。同時にナビゲーションバーを非表示から表示にフェードする必要があるという誤った印象を受けましたが、それは機能しません。

@Eに感謝します。私が意図したことを実行する方法を示すアニメーション コードの Lüders。

4

2 に答える 2

3

このテストコードを実装したところ、正常に動作します。ストーリーボードにナビゲーションバーが表示されます。

//  ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@end


//  ViewController.m
#import "ViewController.h"

@implementation ViewController

- (void)viewWillAppear:(BOOL)animated
{
    [self.navigationController setNavigationBarHidden:YES animated:animated];
    [super viewWillAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [self.navigationController setNavigationBarHidden:NO animated:animated];
    [super viewWillDisappear:animated];
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Hide navigationbar on view load
    [self.navigationController setNavigationBarHidden:YES];
    // Do any additional setup after loading the view, typically from a nib.
}

@end


//////////////////////////////////////////////////////////////
// This controller gets pushed                              //
//////////////////////////////////////////////////////////////

//  ViewController2.h
#import <UIKit/UIKit.h>
@interface ViewController2 : UIViewController
@end


//  ViewController2.m
#import "ViewController2.h"
@implementation ViewController2
@end

お役に立てれば。


編集:

ナビゲーションバーのフェードイン/フェードアウト効果が必要な場合は、上記のコードを次のように変更します。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:YES animated:animated];

    [UIView animateWithDuration:0.5f animations:^{
        self.navigationController.navigationBar.alpha = 0.0f;
    } completion:^(BOOL finished) {}];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    self.navigationController.navigationBar.alpha = 0.0f;
    [self.navigationController setNavigationBarHidden:NO animated:animated];

    [UIView animateWithDuration:0.5f animations:^{
        self.navigationController.navigationBar.alpha = 1.0f;
    } completion:^(BOOL finished) {}];
}
于 2012-09-05T07:28:46.740 に答える
1

Hidden を設定する代わりに、アニメーション ブロックを非表示にする前に Alpha を 0 に設定できます。

そんな感じ:

- (void)viewWillAppear:(BOOL)animated
{
    //fade Animation
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:1.0];
    self.navigationController.view.alpha = 0.0;
    [UIView commitAnimations];

    [self.navigationController setNavigationBarHidden:YES animated:animated];
    [super viewWillAppear:animated];
}
于 2012-09-05T07:00:58.243 に答える