美文网首页iOS开发好文Marked Articles常用组件
IOS开发-详解网易新闻导航标题栏

IOS开发-详解网易新闻导航标题栏

作者: 没阳光的午后 | 来源:发表于2015-12-14 00:40 被阅读7663次

项目源码下载

框架实现效果图

对于该功能的需求分析
1.切换标题,被点击的标题和原标题的比例和颜色都会渐变,并且会切换控制器
2.滑动内容视图也会产生点击标题的效果
3.内容视图一开始不加载,有一张占位图占位
4.视频和社会标题被点击后会滑动到屏幕中央

一步步实现导航标题栏

  • 搭建基本框架
    1.该功能由2个ScrollView组成
    2.标题导航栏可以使用三目运算来判断y值(根据是否存在导航控制器)

  • 设置标题
    1.通过遍历所有的子控制器来创建对应标题
    2.设置标题按钮的X值时,使用下标乘以按钮宽度获得
    3.标题也可以通过label来实现,只需要为label添加点按手势,并且将userInteractionEnabled设置为YES

  • 监听标题按钮点击
    1.通过下标来为按钮tag赋值,并且给按钮添加一个监听方法
    2.在监听方法中恢复上一个按钮文字颜色并将被点击按钮颜色变红,记录下当前被点击按钮
    3.通过按钮tag来获取对应子控制器并设置frame
    4.设置内容控制器的偏移量

  • 监听内容视图滚动
    1.为内容视图添加代理,并在scrollViewDidEndDecelerating:方法中实现
    2.通过内容视图偏移量的X除以屏幕宽度来获得角标
    3.通过角标来选中按钮和获取子控制器的View
    4.在获取子控制器View的方法内判断当前视图是否存在superview,如果存在就return,这段代码可以实现最开始切换在该视图时有个占位图片,实现懒加载

  • 按钮居中处理
    1.通过被选中按钮中心点的X值减去屏幕宽度的一半来计算偏移量
    2.通过偏移量来判断如果小于0或者大于最大滚动宽度时不移动,否则会造成每个标题都居中

  • 标题缩放
    1.通过偏移量除以屏幕宽度来获得左边按钮角标,左边按钮角标加一来获得右边按钮角标
    2.在设置标题按钮方法中,将每个按钮加入可变数组
    3.通过角标来获得2个按钮,这里需要判断如果左边按钮角标为5时,不取右边按钮
    4.通过CGAffineTransformMakeScale方法来对2个按钮缩放

  • 标题文字渐变

    • 为什么文字颜色能渐变?通过RGB来实现,更改R的值就能实现黑色和红色的渐变

具体实现请看源码,若有疑问,会第一时间解答

还在学习中,若有错误请大家指出,谢谢!

相关文章

网友评论

  • 零散的蒲公英:楼主,可以发一份吗
    1812104063@qq.com
  • 宁小缺: vc.view.frame = CGRectMake(x, 0, KWidth, KWidth - self.contentScrollView.frame.origin.y);
    这句代码会导致 加载的部分视图 手势效果无效
    应该改成
    vc.view.frame = CGRectMake(x, 0, KWidth, _contentScrollView.height);
  • 2c94573baccc:邮箱865422177@qq.com
  • 2c94573baccc:楼主给我发一份学习一下吧,,谢谢:pray:
  • YungFan:思路清晰
  • KennyHito:楼主,代码我改进了一下,应该在- (void)setupTitleCenter:(UIButton *)btn方法中,加上
    if (self.buttons.count < 5) {
    return;
    }
    这样效果应该会好些,谢谢你的文章.
  • KennyHito:我在你这里发现一个问题,尝试只有3个标题(少于4个标题就ok),点击就出现一直显示在标题栏的右侧,望楼主改进,其他地方还不错! :smile:
  • 阿兹尔:383160955@qq.com
  • 阿兹尔:楼主能给个详情的
  • 春天的蛋蛋:好不容易找到个觉得看得懂的教程。。怎么下载的楼主?
    春天的蛋蛋:可不可以发一份到我的邮箱
    384812750@qq.com :grin:
  • JanzTam:如果标题栏有很多个,是否会做了重用?
    Super_Yi:@JanzTam 可以做到重用,用CollectionView实现左右滑动即可
    没阳光的午后:@JanzTam 你说的是上面的还是下面的,上面的话是按钮,我还不知道该怎么重用....如果下面的TableView的话是你自己设置的
  • nbhhcty:学习了
  • shikaiming:林秋萍你知道的?
  • 耿杰:最近正在学习网易新闻的布局,勉强地写了出来。学习大神的写法
    没阳光的午后:@a210774d028a 不是什么大神 共勉!
  • 曾樑:放程序员专题了

本文标题:IOS开发-详解网易新闻导航标题栏

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