美文网首页
2018-04-08 渐变导航栏配置设置

2018-04-08 渐变导航栏配置设置

作者: BoooBooo冰Booo | 来源:发表于2018-04-08 21:24 被阅读29次

    渐变即由透明到显现,由看得见到消失不见

    原理: UIScrollView的偏移量,作差值公式的alpha变化设置导航栏及其子视图的颜色和透明度的变化

    1.去除导航栏及其底部一根碍眼的线

    - (void)viewWillAppear:(BOOL)animated{
        [super viewWillAppear:animated];
            //去掉导航栏与self.view中间的那根线
        [self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
        self.navigationController.navigationBar.shadowImage = [[UIImage alloc] init];
        UINavigationBar * navigationBar = [UINavigationBar appearance];
        navigationBar.backgroundColor = [UIColor clearColor];
        navigationBar.barTintColor = [UIColor clearColor];
    }
    

    2. 恢复全局的导航栏设置,不可能说每个页面都是渐变的,如果有那就当我没说

    - (void)viewWillDisappear:(BOOL)animated{
        [super viewWillDisappear:animated];
        UINavigationBar * navigationBar = [UINavigationBar appearance];
        navigationBar.barTintColor = [UIColor orangeColor];
        navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName : [UIColor whiteColor], NSFontAttributeName : [UIFont systemFontOfSize: 15]};
    }
    

    3. 插值算法 这里的kNavBarHeight是导航栏+状态栏的高度,当然也可以是你自定义视图的高度,只是一个定值,用于计算alpha(可以这么理解,往下拽的时候是透明的,往上推的时候到某一个点的时候就开始变色了,变着变着就不变了...)

        CGFloat offsetY = scrollView.contentOffset.y;
        UIColor *color = [UIColor blueColor];
        if (offsetY > kNavBarHeight) {
            if (offsetY > kNavBarHeight*2) {
                offsetY = kNavBarHeight*2;
            }
            CGFloat alpha = (offsetY - kNavBarHeight)/kNavBarHeight;
            //各种视图透明度设置为alpha
        }else{
          //各种视图设置为透明
        }
    

    相关文章

      网友评论

          本文标题:2018-04-08 渐变导航栏配置设置

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