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

     最近,navigationBar的渐变效果实现火的要命,几乎每个app,不管合适不合适的都会加上一两个这种页面,之前开发的项目里,也做了这种效果,现在闲暇之余,给大家分享一下心得。话不多说,直接贴代码。

第一步:

在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;

}



navigationBar效果透明基本就已经实现了,这只是其中一种方法,还有别的方法,比如将navigationBar隐藏掉,然后自己画了一个view,来实现变透明效果,这种方法也是极好的。


你可能感兴趣的:(IOS)