首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

scrollView滚动导航条渐变

scrollView滚动导航条渐变

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

#import@interface UINavigationBar (LH)

- (void)lhSetBackgroundColorUIColor *)backgroundColor;

- (void)lhReset;

@end

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

#import@implementation UINavigationBar (LH)

static char overlayKey;

- (UIView *)overlay{

return objc_getAssociatedObject(self, &overlayKey);

}

- (void)setOverlayUIView *)overlay{

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

}

- (void)lhSetBackgroundColorUIColor *)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)scrollViewDidScrollUIScrollView *)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]];

}

}


返回列表