美文网首页
iOS navigationBar的半透明颜色渐变效果实现

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

作者: Heikki_ | 来源:发表于2016-11-29 15:03 被阅读145次

第一步:
在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;
}

相关文章

网友评论

      本文标题:iOS navigationBar的半透明颜色渐变效果实现

      本文链接:https://www.haomeiwen.com/subject/hvnapttx.html