渐变导航条实现(根据ScrollView的滚动改变导航条透明度和颜色)

渐变.gif

地址:https://github.com/huberyhx/HXChangeNavigationBar.git

实现过程简介:

  • 界面组成:
    底部是TableView(占据控制器的整个View)
    顶部的一个View以及其内部的两个ImageView
    中间的红色分隔条View

  • 控件约束:
    tableView:距上下左右均为0,与控制器View等大
    顶部View:距上左右为0,然后定高(控制器需要获得这个高属性来修改它)
    顶部View内部第一个ImageView:距上下左右均为0,与顶部View等大,拥有下拉放大效果显示模式应该选择UIViewContentModeScaleAspectFill(关于ImageView的图片显示模式,请见我的另一篇文章:http://www.jianshu.com/p/d38d3e6f3db4)
    顶部View内部第二个ImageView:在父控件中水平居中,距下40,定高定宽(不会缩小变形)
    红色分隔条View:紧贴顶部View,距左右为0,定高44

  • 设计思路:

首先要知道设置导航条的透明度是不能让导航条的透明度发生变化的(无效)
所以我们设置导航条背景图的透明度,来实现导航条看上去透明了的效果
另外导航条还有一个ShadowImage(直接隐藏掉好了)
是导航条下面的那根线:


BackgroundImage和ShadowImage.png

初始状态如下设置:

.
//设置tableView的contentInset 让tableView的第一行从红色View下部开始显示
    self.tableView.contentInset = UIEdgeInsetsMake(244, 0, 0, 0);
.
//设置无颜色ImageView给navigationBar,实现navigationBar透明效果
    [self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc]init] forBarMetrics:UIBarMetricsDefault];
    [self.navigationController.navigationBar setShadowImage:[[UIImage alloc]init]];//导航条图片下面的线
.
//设置标题
    UILabel *title = [[UILabel alloc] init];
    title.text = @"我在渐变";
    [title sizeToFit];
    title.textColor = [UIColor colorWithWhite:0 alpha:0];
    self.navigationItem.titleView = title;

然后在ScrollView的滚动监听方法里面根据TableView滚动了多少来改变图片透明度:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
//一堆计算过程:
    CGFloat offset = scrollView.contentOffset.y - originY;
    //当前值 - 原始值 = 偏移量
    CGFloat h = originH - offset;
    if (h<64) {
        h = 64;
    }
    
    CGFloat alpha = offset * 1 / 136.0;
    if (alpha >=1) {
        alpha = 0.99;
    }
//计算结束
.
    //修改顶部View的高度
    self.viewHeight.constant = h;

    //拿到标题 设置标题透明度
    UILabel *titleL = (UILabel *)self.navigationItem.titleView;
    titleL.textColor = [UIColor colorWithWhite:0 alpha:alpha];
  
    //修改导航栏的背景图片
    //把颜色生成图片
    UIColor *alphaColor = [UIColor colorWithWhite:1 alpha:alpha];
    //把颜色生成图片
    UIImage *alphaImage = [self imageWithColor:alphaColor];
    //修改导航条背景图片
    [self.navigationController.navigationBar setBackgroundImage:alphaImage forBarMetrics:UIBarMetricsDefault];
}
//根据颜色来生成一张图片
-(UIImage *)imageWithColor:(UIColor *)color
{
    // 描述矩形
    CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
    // 开启位图上下文
    UIGraphicsBeginImageContext(rect.size);
    // 获取位图上下文
    CGContextRef context = UIGraphicsGetCurrentContext();
    // 使用color演示填充上下文
    CGContextSetFillColorWithColor(context, [color CGColor]);
    // 渲染上下文
    CGContextFillRect(context, rect);
    // 从上下文中获取图片
    UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
    // 结束上下文
    UIGraphicsEndImageContext();
    return theImage;
}

感谢阅读
你的支持是我写作的唯一动力

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 2,468评论 1 14
  • 1、禁止手机睡眠[UIApplication sharedApplication].idleTimerDisabl...
    DingGa阅读 1,114评论 1 6
  • 今天的晨读分享的是《非暴力沟通》,猫叔说书里三个神奇的沟通法则,可迅速提升你的言值。 这本书其实在昨天的赵周老师的...
    娜娜_51cf阅读 373评论 5 3
  • 莫名其妙的 在编译时 遇到这个错误,试过多种方法以后,找到原因。因为 更改或 lock 或 unlock 过登录钥...
    天亮的曙光阅读 1,283评论 0 0
  • 一 作者:沈虹 文章:丑哥和猫 点评:王雪梅 三岁的猫,四岁的丑哥,想想就很可爱。作者细节描述引人入胜!继续加油儿...
    苏醒7阅读 152评论 0 0