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

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

原理: 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 渐变导航栏配置设置)