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。spa

 

 

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

其实咱们从结构图中能够看出来,它是NavigationBar的子视图,咱们能够经过for…in循环遍历navigationBar.subviews,而后得到这个view。blog

- (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;
}
相关文章
相关标签/搜索