IOS 滑动指示导航栏 渐变

关于导航栏渐变,本人在写APP的时候,发现了各路大神各现其通,其实我觉得这个是个很简单的问题,不需要搞得那么麻烦,对个项目要求整齐来说,一般会建一个工具类,自定义View,各个同事需要的时候,直接调用即可,如下代码:

-(void)craetNavBar{
    self.Naviews=[[NavBarViewHiddenAphle alloc]initWithFrame:CGRectMake(0, 0, ScreenWidth, Height_NavBar)];
    self.Naviews.alpha = 0.0;
    self.Naviews.delegate=self;
    [self.view addSubview:self.Naviews];
}

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{ CGFloat minAlphaOffset = - Height_NavBar; CGFloat maxAlphaOffset = 200; CGFloat offset = scrollView.contentOffset.y; CGFloat alpha = (offset - minAlphaOffset) / (maxAlphaOffset - minAlphaOffset); // if (offset <= 0) { // self.Naviews.alpha = 0.0; // }else{ // self.Naviews.alpha = alpha; // NSLog(@"%f",alpha); // // }或者: if (offset <= 0) { self.Naviews.alpha = 0.0; }else{ self.Naviews.alpha = offset/maxAlphaOffset; NSLog(@"%f",alpha); } }

 

第二种方式便是,运行时动态绑定

我们可以在运行时动态绑定他的背景视图,然后设置他的背景透明度,网上有一个通过类别方式动态绑定实现导航栏颜色渐变的三方框架,感兴趣的朋友可以自行去研究研究LTNavigation。

 

 

第三便是直接获取那张ImageView,然后设置他的透明度。

其实我们从结构图中可以看出来,它是NavigationBar的子视图,我们可以通过for…in循环遍历navigationBar.subviews,然后获得这个view。

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    //设置透明导航栏
    UIView *barImageView = self.navigationController.navigationBar.subviews.firstObject;
    barImageView.alpha = 0.0;
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGFloat minAlphaOffset = - 88;
    CGFloat maxAlphaOffset = 200;
    CGFloat offset = scrollView.contentOffset.y;
    CGFloat alpha;
    if (offset <= 0) {
        alpha = 0.0;
    } else {
        alpha = (offset - minAlphaOffset) / (maxAlphaOffset - minAlphaOffset);
    }
    UIView *barImageView = self.navigationController.navigationBar.subviews.firstObject;
    barImageView.alpha = alpha;
}

 

posted @ 2019-05-07 11:44  红凉梦  阅读(1048)  评论(0编辑  收藏  举报