美文网首页iOS 开发 程序员
滚动标题条的创建

滚动标题条的创建

作者: candyGU | 来源:发表于2016-01-21 16:47 被阅读0次

首先,预览一下实现效果:

滚动标签条

     滚动标签条在应用中起到导航的功能,可将正文内容分成具体的内容模块,用户点击标签时相对应的内容视图同步切换,反之,滑动内容视图的页面时标签条也会跟随变换。ps.图中的label为自定义控件GYLabel,可达到点击时字体放大变色的效果,本文中就先不赘述。

为达到以上需求,实现方式如下:

主框架由两个scrollview组成:

1.滚动标题条smallScroll

2.对应于标题的内容视图bigScroll


==== 完成点击标签显示对应的内容视图====

a.滚动标题条绑定用户点击响应

滚动标题条的视图是由GYLabel组合而成的,每add一个子视图,配置tag属性,由0开始逐个递增;给每一个标签添加手势:

addGestureRecognizer:[ [UITapGestureRecognizer alloc]

initWithTarget:self action:@selector(lblClick:) ]

响应方法lblClick中拿到点击视图,根据标签的tag值算出大的滚动内容视图的位移值,这样可做到标签与内容视图以及用户交互动作的三者绑定。

ps.不要忘记label.userInteractionEnabled = YES

-(void)lblClick:(UITapGestureRecognizer*)recognizer

//点击标签时内容视图滑动到指定的坐标,并且带动画效果

{ [self.bigScroll setContentOffset:

CGPointMake(recognizer.view.tag*self.bigScroll.bounds.size.width, 0)

animated:YES]; }


b.显示bigScroll的内容视图

分析一下:致使bigScroll发生滑动的有可能是用户点击了标签或者直接滑动屏幕,而在这两种情况下都会调用的方法应该是系统的UIScrollViewDelegate中的委托响应方法。

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

{    [self scrollViewDidEndScrollingAnimation:scrollView];  }

选用以上的委托代理响应顺序,在view停止滑动并且动画结束时调用,在方法中讲子控制器的view加载到bigScroll,子控制器的实例对象在viewDidLoad时机中已经生成。

此处用子控制器来完成是考虑到界面如果比较复杂,其相关设置可由子控制器去完成。

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

NSUInteger index=scrollView.contentOffset.x/self.bigScroll.bounds.size.width;

UIViewController* vc=self.childViewControllers[index];

vc.view.frame=scrollView.bounds;

[self.bigScroll addSubview:vc.view]; }


==== 手动滑动内容视图滚动标签条跟随变化====

因为是伴随着滑动时页面显示一起变化的,所以这部分的逻辑实现应该和页面生成是在同一个时机。

分析一下:用户的点击区域分成屏幕可视部分的左半边和右半边

a.如果点击的标签中心点的位置在左半边,则点击不发生位移;

b.如果点击的标签中心点的位置在右半边,则点击时标签水平位移到屏幕中心点;

c.需要考虑标签的最大水平位移距离(滚动标题条smallScroll内容视图超出屏幕部分的水平距离),如果位移到屏幕中心点的位移量大于最大水平位移距离,则此时的水平位移量应该设定为最大水平位移距离。


`

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

NSUInteger index=scrollView.contentOffset.x/self.bigScroll.bounds.size.width;

UILabel* label=self.smallScroll.subviews[index];

//中心点在左半边

CGFloat offsetx=label.center.x-self.smallScroll.bounds.size.width*0.5;

//最大水平位移距离

CGFloat offsetMax=

self.smallScroll.contentSize.width-self.smallScroll.bounds.size.width;

if (offsetx<0) {offsetx=0;}

else if(offsetx>offsetMax) {offsetx=offsetMax; }

[self.smallScroll setContentOffset:CGPointMake(offsetx, 0) animated:YES]; }

`

相关文章

  • 滚动标题条的创建

    首先,预览一下实现效果: 滚动标签条在应用中起到导航的功能,可将正文内容分成具体的内容模块,用户点击标签时相对...

  • 通过代码和通过Storyboard创建UIScrollView的

    通过Storyboard创建UIScrollView自带的滚动条(上下和左右两个滚动条)就占了两个UIImageV...

  • ionic 滚动条+侧栏菜单+滑动框

    ionic 滚动条 ion-scroll ion-scroll 用于创建一个可滚动的容器。 用法 API 实例 【...

  • 如何通过 4 个简单的步骤仅使用 CSS 创建自定义滚动条 -

    但首先,为什么要创建自定义滚动条? 答案很简单——默认的滚动条很丑,不符合任何网站的主题!此外,自定义滚动为您的网...

  • Android滚动条广告实现

    前言 几乎每个上线的App上面都会有个滚动条广告,滚动条广告主要以文字标题的形式存在,什么点开文章你就能赚一百万啊...

  • scroll和wheel事件

    scroll 1 .scroll事件在滚动条滚动时被触发2 . scroll检测的是滚动条的滚动,当滚动条不能滚动...

  • [获取滚动条宽度]通过offsetWidth

    浏览器的异同没有统一的方法获取纵向或者横向滚动条的实际宽度 动态创建dom结构根据当前浏览器计算 纯在滚动条和不存...

  • 商品展示特效

    一、水平滚动条 和 垂直滚动条 1.1 核心技术点1)求滚动条的长度? 2)拖动滚动条,求内容要走多少?滚动条的长...

  • js特效-2

    一,水平滚动条和垂直滚动条 1.1技术点 1)求滚动条的长度 2)拖动滚动条,求内容要走多少 ~滚动条的长度取决于...

  • PC端滚动条滚动

    JS控制滚动条的位置: 竖向滚动条置顶: 竖向滚动条置底: 缓慢的滚动到底部

网友评论

    本文标题:滚动标题条的创建

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