UIScrollView是我们开发中的一个常用的控件,在我各种各样的APP中几乎都能看到它的身影;下面我就来介绍一种使用scrollview来实现类似于网易新闻和今日头条UI的用法。效果图如下:
效果图根据效果图可以分析出,整个UI是由两个UIScrollView组成。上面的是一个titleScrollView,用于显示标题;下面的是一个contentScrollView,用于显示内容。可能在添加两个scrollview后,会出现scrollview位置不正确的问题,一般设置self.automaticallyAdjustsScrollViewInsets = NO就可以解决问题。
首先添加子控制器到当前的控制器中 [self setupChildVC],setupChildVC函数的具体实现为
添加子控制器然后添加标题[self setupTitles];setupTitles函数的实现为:
添加标题这里,我对UIlabel进行了封装,将一些基本的操作都封装在了TItlelabel里面。设置label的字体颜色和大小只要设置label的scale值就行了。
封装的TitleLabel接下来,实现titleScrollview上面的一些功能,包括点击标题,contentScrollView移动到对应的位置,并加载相应的子控制器视图。
title的点击实现的功能为:
设置contentScrollView的位置把添加子控制器放在添加title之前是因为title是根据控制器的title来获取的。如果两个位置互换,会导致title的text没有值
如何实现title点击居中呢?其实要实现title居中,只要titleScrollview偏移一个合适的值就能实现。那么这个偏移值是怎么计算的呢?在草稿上面画一个草图,你就能发现,title居中的这个偏移值,等于label的中心点的x值减去屏幕宽度的一半。title点击后居中是在- (void)scrollViewDidEndScrollingAnimation:(UIScrollView*)scrollView这个方法中实现,这个方法是在滑动动画结束后调用。在这个方法中来实现让我们选中的title居中
title居中将控制器的view添加到contentScrollView。首先从子控制器获取将要显示的子控制器,然后再加载到contentScrollView。加载前需要判断是否已加载,没加载才需要加载,已经加载过则直接返回即可。
添加控制器视图到contentScrollView最后来实现titleScrollview颜色转变和大小转变的功能。这就需要我们监控contentScrollView的偏移量,根据其当前的偏移量进行计算,获取scale,来这只左右两边label的字体颜色和字体大小。要想实时监控contentScrollView的偏移量就需要实现它的代理方法- (void)scrollViewDidScroll:(UIScrollView*)scrollView。具体实现如下:
titleScrollview标题颜色和字体随偏移量的变化而变化以上就是实现这个功能的详细解析,其中UIlabel可以用UIButton代替。具体功能可能根据项目需要进行修改!!
网友评论