2012-05-23 100 views
3

我正在制作一个应用程序,它在单击时显示/隐藏(在自定义动画中)UINavigationBar。隐藏UINavigationBar时的自定义动画

我创建了两个函数(一个用于显示,另一个用于隐藏)。用于显示UINavigationBar的功能完美的作品:

- (void) showNavigationBar { 
    [UINavigationBar beginAnimations:@"NavBarFadeIn" context:nil]; 
    self.navigationController.navigationBar.alpha = 0; 
    [UINavigationBar setAnimationCurve:UIViewAnimationCurveEaseIn]; 
    [UINavigationBar setAnimationDuration:0.5]; 
    [UINavigationBar setAnimationTransition:UIViewAnimationOptionTransitionFlipFromTop 
            forView:self.navigationController.navigationBar 
             cache:YES]; 
    self.navigationController.navigationBar.alpha = 1; 
    [UINavigationBar commitAnimations]; 
} 

但对于隐藏它,即使是同样的功能,不能正常工作。 UINavigationBar在没有动画的情况下突然消失。

- (void) hideNavigationBar { 
    [UINavigationBar beginAnimations:@"NavBarFadeOut" context:nil]; 
    self.navigationController.navigationBar.alpha = 1; 
    [UINavigationBar setAnimationCurve:UIViewAnimationCurveEaseIn]; 
    [UINavigationBar setAnimationDuration:0.5]; 
    [UINavigationBar setAnimationTransition:UIViewAnimationOptionTransitionCurlUp 
            forView:self.navigationController.navigationBar 
             cache:YES]; 
    self.navigationController.navigationBar.alpha = 0; 
    [self.navigationController setNavigationBarHidden:YES animated:NO]; 
    [UINavigationBar commitAnimations]; 
} 

调用:

- (void)contentView:(ReaderContentView *)contentView touchesBegan:(NSSet *)touches 
{ 
    if([[self navigationController] isNavigationBarHidden] == NO) 
    { 
    if (touches.count == 1) // Single touches only 
    { 
      UITouch *touch = [touches anyObject]; // Touch info 
      CGPoint point = [touch locationInView:self.view]; // Touch location 
      CGRect areaRect = CGRectInset(self.view.bounds, TAP_AREA_SIZE, TAP_AREA_SIZE); 

      if (CGRectContainsPoint(areaRect, point) == false) return; 
     } 
     [mainToolbar hideToolbar]; 
     [mainPagebar hidePagebar]; // Hide 

     [self hideNavigationBar]; 
     lastHideTime = [NSDate new]; 
    } 
} 

任何人有一个关于为什么发生这种情况的线索?

+0

你能后,你打电话-showNavigationBar和hideNavigationBar –

+0

我刚才编辑它,包括调用代码 – crisisGriega

回答

3

它正在发生,因为您在动画代码中调用[self.navigationController setNavigationBarHidden:YES animated:NO];,但boolian值不具动画性。 bool值没有“在两个值之间”。

你应该叫[self.navigationController setNavigationBarHidden:YES animated:NO];中,你与

[UINavigationBar setAnimationDidStopSelector: @selector(myCoolMethod:)]; 
+0

感谢您的代码动画后方案的方法非常,我正在寻找类似的东西。 – crisisGriega

+0

,这也帮助我。非常感谢。 – FisherMartyn

相关问题