iOS navigationBar的半透明颜色渐变效果实现

2016-11-29  本文已影响145人  Heikki_

第一步:
在viewWillAppear方法中先设置navigationController的代理为self(控制器本身)。

-(void)viewWillAppear:(BOOL)animated
{
    [superviewWillAppear:animated];
     self.navigationController.delegate =self;
 }

第二步:

在navigationController这个代理方法中判断一下,如果是此控制器就设置透明,不是此控制器就设置成不同样式,这样做的目的是,当你进入navigationBar透明的这个控制器后,不管push还是pop到别的控制器时,navigationBar不会变成透明。

-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if (viewController == self) {
        // 背景设置为黑色
        self.navigationController.navigationBar.tintColor = [UIColor blackColor];
        // 透明度设置为0.3
        self.navigationController.navigationBar.alpha = 0;
        // 设置为半透明
        self.navigationController.navigationBar.translucent = YES;
     
      } else {
        // 进入其他视图控制器
        self.navigationController.navigationBar.alpha = 1;
        // 背景颜色设置为系统默认颜色
        self.navigationController.navigationBar.tintColor = nil;
        self.navigationController.navigationBar.translucent = NO;
    }
}

第三步:
当拖动你的tableView或者collectionView时,会调用UIScrollowView的这个代理方法,在它里面做navigationBar颜色渐变的操作。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
     CGFloat offsetY = scrollView.contentOffset.y;
    if (offsetY >50) {
        CGFloat alpha =MIN(1,1 - ((50 +64 - offsetY) / 64));
        self.navigationController.navigationBar.alpha = alpha;
    }else
    {
        self.navigationController.navigationBar.alpha = 0;

    }
    
}

第四步:
此时渐变效果就完成了,但是别忘了,一个程序有且只有一个navigationController,我们在第一步的时候,在viewWillAppear方法里将self.navigationController.delegate =self;当此控制器消失时,会造成delegate的混乱,所以当每次带透明navigationBar效果的控制器消失时,调用dealloc方法。

-(void)dealloc
{
    self.navigationController.delegate =nil;
}
上一篇下一篇

猜你喜欢

热点阅读