2012-09-05 24 views
2

我試圖讓我的應用程序工作,以便在根視圖控制器中,沒有導航欄可見,並且當我將另一個視圖控制器推到我的堆棧上時(使用Storyboard segues),導航欄會將動畫放入視圖中(淡入視圖當視圖滑入視圖時)。我的UINavigationBar怎麼會不動畫?

正如在其他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

UPDATE /回答:最終事實證明,我的代碼是在 「工作」它正在做蘋果想要的功能,將導航欄滑動到視圖中。我有一種錯誤的印象,那就是它應該同時讓導航欄從不可見到可見,但這不是它的工作原理。

感謝@E。動畫代碼Lüders顯示如何做我的意圖。

+1

您的代碼工作完全正常的我。它只是看起來像你的視頻,這是它發生的動畫= YES的方式。你想如何淡入淡出你的導航欄?阿爾法值? –

+1

我在下面編輯了我的答案並添加了淡入/淡出動畫 –

+0

也許使用'viewDidAppear'會更有意義。從另一個動畫中開始動畫不是一個好主意。 – Sulthan

回答

3

我實現了這個testcode並能正常工作。在我的故事板中,導航欄是可見的。

// 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) {}]; 
} 
+0

我開始了一個新項目,使用了上面的確切代碼,但仍然存在問題。我想知道這是否可能是iOS 6 SDK或Xcode 4.5中的錯誤?我將嘗試找到Xcode 4/iOS 5的發佈版本,然後查看它是否正常。 –

+0

我添加了一個視頻演示展示了什麼我的應用程序在做什麼(我在的iOS 5.1重現這一以及):http://youtu.be/B9fuCc2Jqtg –

+0

增加了一個鏈接到我的演示項目:HTTPS://www.dropbox。 com/sh/mwsgjyup4iumy2r/QNN7xkHXSt –

1

除了隱藏之外,您可以在隱藏之前將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]; 
} 
+0

感謝您的迴應,但這似乎不起作用。我認爲你有一個錯字,並設置self.navigationController.view.alpha = 0,而不是self.navigationController.navigationBar.alpha = 0。我嘗試了兩種方式,它不會做我在說什麼。 –

+0

我現在看到您的代碼與@E非常相似。呂德斯,感謝你們的幫助。 –