iOS 之导航渐变,并且跳转返回保持滑动状态

导航刚开始进入为透明,根据我们的滑动确定要显示的背景色。先看一下效果图:


效果图

一:创建demo,将3个界面添加到控制器中,此过程比较简单代码就不上了。

二:在第一页的viewDidload中将当前页面的导航设置为设置为透明状态,以及去除底部的黑线。

[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; 

  [self.navigationController.navigationBar setShadowImage:[UIImage new]];

三:如果我们直接在滚动过程中设置navigationBar的背景色,顶部状态栏是不会改变的、PASS!!所以我们可以为self.navigationController.view设置一个背景view用来实现我们的变化效果:

- (UIView *)navView{

    if (_navView == nil) { 

 _navView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0,self.navigationController.navigationBar.bounds.size.width,self.navigationController.navigationBar.bounds.size.height+20)];      

    [self.navigationController.view insertSubview:_navView belowSubview:self.navigationController.navigationBar];  

  }  

  return _navView;

}

四:接下来我们就需要使用scrollview的方法来动态处理颜色变化:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{

    alpha = scrollView.contentOffset.y/600;  

  if (alpha > 1) {    

    alpha = 1;  

  }  

  if (scrollView == _tab) {      

  [self navView].backgroundColor = [UIColor colorWithRed:0.2 green:0.5 blue:0.7 alpha:alpha];  

  }

}

到了这里,我们的滚动颜色变化基本完成了,但是我们在开发中不仅仅这样,我们可能在这一个界面需要push出新的界面或者通过tabbar去选择别的界面。所以,为了保持当前界面的状态,我们需要在界面出现或者消失的时候做一些特定的设置。

- (void)viewWillAppear:(BOOL)animated{

    [super viewWillDisappear:animated];

    [self navView].backgroundColor = [UIColor colorWithRed:0.2 green:0.5 blue:0.7 alpha:alpha];

}

-(void)viewWillDisappear:(BOOL)animated{

    [super viewWillDisappear:animated];

    [self navView].backgroundColor = [UIColor orangeColor];

}

ok、结束!附上demo的链接:

https://github.com/MrTiemo/navigationBar

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容