scrollViewDidEndScrollingAnimation和scrollViewDidEndDecelerating的区别

#pragma mark - 监听

/**

 *  点击了顶部的标题按钮

 */

- (void)titleClick:(XMGTitleButton *)titleButton

{

    // 修改按钮状态

    self.clickedTitleButton.selected = NO;

    titleButton.selected = YES;

    self.clickedTitleButton = titleButton;

    

    // 移除底部下划线

    [UIView animateWithDuration:0.25 animations:^{

        self.titleUnderlineView.width = titleButton.titleLabel.width;

        self.titleUnderlineView.centerX = titleButton.centerX;

    }];

    

    // 让scrollView滚动到对应的位置(不要去修改contentOffset的y值)

    CGPoint offset = self.scrollView.contentOffset;

    offset.x = titleButton.tag * self.scrollView.width;

    [self.scrollView setContentOffset:offset animated:YES];

   //不是人为拖拽scrollView导致滚动完毕,会调用scrollViewDidEndScrollingAnimation这个方法

}

#pragma mark - <UIScrollViewDelegate>

/**

 *  滚动完毕就会调用(如果不是人为拖拽scrollView导致滚动完毕,才会调用这个方法)

 */

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView

{

    int index = scrollView.contentOffset.x / scrollView.width;

    UIViewController *willShowChildVc = self.childViewControllers[index];

    

    // 如果这个子控制器的view已经添加过了,就直接返回

    if (willShowChildVc.isViewLoaded) return;

    

    // 添加子控制器的view

    willShowChildVc.view.frame = scrollView.bounds;

    [scrollView addSubview:willShowChildVc.view];

}

/**

 *  滚动完毕就会调用(如果是人为拖拽scrollView导致滚动完毕,才会调用这个方法)

 */

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

{

    int index = scrollView.contentOffset.x / scrollView.width;

    // 点击对应的按钮

    [self titleClick:self.titleButtons[index]];

    

    // 添加子控制器的view

    [self scrollViewDidEndScrollingAnimation:scrollView];

}

时间: 2024-11-06 12:01:26

scrollViewDidEndScrollingAnimation和scrollViewDidEndDecelerating的区别的相关文章

iOS开发笔记13:顶部标签式导航栏及下拉分类菜单

当内容及分类较多时,往往采用顶部标签式导航栏,例如网易新闻客户端的顶部分类导航,最近刚好有这样的应用场景,参考网络上一些demo,实现了这种导航效果,记录一些要点. 效果图(由于视频转GIF掉帧,滑动和下拉动画显得比较生硬,刚发现quickTime可以直接录制手机视频,推荐一下,很方便) 1.顶部标签式导航栏 (1)实现思路 其实就是在上下两个UIScrollView上做文章,实现联动选择切换的效果. ①顶部标签导航栏topCategoryListScrollView加载显示分类数据,下方con

UI:DidEndDragging 和DidEndDecelerating以及DidScroll的区别

最近在写一个新闻app的界面,发现自己在学习上还存在一些问题,有的方法容易混淆,比如关于scrollView的滚动: (1)-(void)scrollViewDidScroll:(UIScrollView *)scrollView scrollView滚动时,就调用该方法.任何offset值改变都调用该方法.即滚动过程中,调用多次 默认是在scrollview拖动的时候会被调用,如果不执行的话 检查 scrollview.delegate = self;设置没设置,或者检查XIB中File's

Nginx 反代参数:$X-Real-Ip和$X-Forwarded-For的区别

## \$X-Real-Ip和$X-Forwarded-For的区别 标签(空格分隔): nignx 负载均衡 client-ip --- ####1.如果只有一层代理,这两个头的值就是一样的####2.多层代理> * X-Forwarded-For:  header包含这样一行        `*X-Forwarded-For: 1.1.1.1, 2.2.2.2, 3.3.3.3*`> * X-Real-Ip:没有相关标准,上面的例子,如果配置了X-Read-IP,可能会有两种情况`// 最

C#中Convert和parse的区别

Convert.ToInt32()与int.Parse()的区别(1)这两个方法的最大不同是它们对null值的处理方法: Convert.ToInt32(null)会返回0而不会产生任何异常,但int.Parse(null)则会产生异常. 没搞清楚Convert.ToInt32和int.Parse()的细细微区别时千万别乱用,否则可能会产生无法预料的结果,举例来说:假如从url中取一个参数page的值,我们知道这个值是一个int,所以即可以用Convert.ToInt32(Request.Que

python判断字符串,str函数isdigit、isdecimal、isnumeric的区别

s为字符串s.isalnum() 所有字符都是数字或者字母s.isalpha() 所有字符都是字母s.isdigit() 所有字符都是数字s.islower() 所有字符都是小写s.isupper() 所有字符都是大写s.istitle() 所有单词都是首字母大写,像标题s.isspace() 所有字符都是空白字符.\t.\n.\r 判断是整数还是浮点数a=123b=123.123 >>>isinstance(a,int)True>>>isinstance(b,floa

java web 过滤器跟拦截器的区别和使用

1.首先要明确什么是拦截器.什么是过滤器 1.1 什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作.拦截是AOP的一种实现策略. 在Webwork的中文文档的解释为--拦截器是动态拦截Action调用的对象.它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行.同时也是提供了一种可以提取action中可重用的部分的方式.

mysql中int、bigint、smallint和tinyint的区别与长度

对比发现 int bigint smallint 和 tinyint 类型,如果创建新表时没有指定 int(M) 中的M时,默认分别是 : int             -------     int(11) bigint       -------     bigint(20) smallint   -------     smallint(6) tinyint     -------     tinyint(4) 下面是这几种类型的取值范围 参考:http://www.2cto.com/d

call和apply和bind的区别

在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向. JavaScript 的一大特点是,函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」. apply(): 将函数作为指定对象的方法来调用,传递给它的是指定的参数数组function.apply(thisobj, args) 或者 function.apply(thisobj, args) 1.thisobj

mybatis中&quot;#&quot;和&quot;$&quot;的区别

mybatis中"#"和"$"的区别 动态 sql 是 mybatis 的主要特性之一,在 mapper 中定义的参数传到 xml 中之后,在查询之前 mybatis 会对其进行动态解析.mybatis 为我们提供了两种支持动态 sql 的语法:#{} 以及 ${}. 在下面的语句中,如果 username 的值为 zhangsan,则两种方式无任何区别: select * from user where name = #{name}; select * from