美文网首页
scrollView滚动导航条渐变

scrollView滚动导航条渐变

作者: 薰衣草儿 | 来源:发表于2017-01-06 13:34 被阅读89次

    很多时候 项目中要求导航栏的颜色随着scrollview的滚动发生渐变,于是自己就写了一个demo没方法比较简单 写一个UINavigationBar的分类 在分类的.h文件中声明两个方法 

    #import@interface UINavigationBar (LH)

    - (void)lhSetBackgroundColor:(UIColor *)backgroundColor;

    - (void)lhReset;

    @end

    在.m文件中实现方法 其中需要注意的是 用到了runtime的关联对象 ,关联对象就是把两个对象相互关联起来,使得一个对象多为另一个对象的一部分.具体讲解以后会给大家以文章形式写出来 ,这里就不过多讲解了

    #import@implementation UINavigationBar (LH)

    static char overlayKey;

    - (UIView *)overlay{

    return objc_getAssociatedObject(self, &overlayKey);

    }

    - (void)setOverlay:(UIView *)overlay{

    objc_setAssociatedObject(self, &overlayKey, overlay, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

    }

    - (void)lhSetBackgroundColor:(UIColor *)backgroundColor{

    if (!self.overlay) {

    [self setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];

    self.overlay  = [[UIView alloc] initWithFrame:CGRectMake(0, -20, [UIScreen mainScreen].bounds.size.width, CGRectGetHeight(self.bounds)+20)];

    self.overlay.userInteractionEnabled = NO;

    self.overlay.autoresizingMask = UIViewAutoresizingFlexibleWidth;

    [self insertSubview:self.overlay atIndex:0];

    }

    self.overlay.backgroundColor = backgroundColor;

    }

    - (void)lhReset{

    [self setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];

    [self.overlay removeFromSuperview];

    self.overlay = nil;

    }

    @end

    现在是只要在你要实现的控制器中调用这连个方法就好了 其中最主要的方法就是

    #pragma mark UIScrollViewDelegate

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView

    {

    UIColor *color = [UIColor colorWithRed:45/255.0 green:45/255.0 blue:45/255.0 alpha:1];

    CGFloat offsetY = scrollView.contentOffset.y;

    if (offsetY >= - self.view.frame.size.height ) {

    CGFloat alpha = 1- offsetY/self.view.frame.size.height;

    [self.navigationController.navigationBar lhSetBackgroundColor:[color colorWithAlphaComponent:alpha]];

    self.titlelabel.alpha = alpha;

    } else {

    [self.navigationController.navigationBar lhSetBackgroundColor:[color colorWithAlphaComponent:0]];

    }

    }

    当然不会忘了demo的连接的:https://git.oschina.net/huanni/scrollviewNav.git

    效果图如下

    相关文章

      网友评论

          本文标题:scrollView滚动导航条渐变

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