美文网首页
iOS11实现滑动导航栏渐变

iOS11实现滑动导航栏渐变

作者: iOS_小胜 | 来源:发表于2018-03-29 16:03 被阅读653次

*************建议自定义,一定要用原生再看下去**************

我这边实现的是用原生导航栏做成渐变的,自定义的相对简单。上代码

为了好复制(你懂的),最近简书展示代码也很工整了👍

_navAlpha全局属性为了跳转上级页面返回的时候保持在原来滑动的高度


- (void)viewWillAppear:(BOOL)animated  {

    [super viewWillAppear:animated];   

    UIImage *image = [self imageWithColor:[UIColor colorWithWhite:1 alpha:_navAlpha] andSize:CGSizeMake(1, 1)];

    [self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];

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

}


- (void)viewWillDisappear:(BOOL)animated {

    [super viewWillDisappear:animated];

    [self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];

    [self.navigationController.navigationBar setShadowImage:nil];

}


#pragma mark 根据尺寸,颜色生成对应的图片

- (UIImage *)imageWithColor:(UIColor *)color andSize:(CGSize)size {

    CGRect rect = CGRectMake(0.0f, 0.0f, size.width, size.height);

    UIGraphicsBeginImageContext(rect.size);

    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetFillColorWithColor(context, [color CGColor]);

    CGContextFillRect(context, rect);

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

    CGContextAddEllipseInRect(context, rect);

    UIGraphicsEndImageContext();

    return image;

}


#pragma mark 滑动

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

    CGFloat offset = scrollView.contentOffset.y/50;

    offset = offset < 0 ? 0 : offset;

    offset = offset > 1 ? 1 : offset;

    UIImage *image = [self imageWithColor:[UIColor colorWithWhite:1 alpha:offset] andSize:CGSizeMake(1, 1)];

    [self.navigationController.navigationBar setBackgroundImage:image

                                                  forBarMetrics:UIBarMetricsDefault];

    _navAlpha = offset;

}

相关文章

网友评论

      本文标题:iOS11实现滑动导航栏渐变

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