简书的滑动悬停效果

2017-11-16 17_10_45.gif

最近,浏览简书的时候,发现简书iOS客户端的个人主页,有这种滑动悬停的效果,自己也想动手实现下。下面是我的实现效果:


2.gif
3.gif

整个代码实现过程不复杂,复杂的是实现思路。如何实现推上去的效果,和实现tab分页控件的悬停效果是重点。
11864689-97DB-47C9-8281-EE97E9E40CD4.png

方案一 :利用tableView的sectionHeader悬停效果

以下是实现思路:

一.分页Tab控件的滑动悬停效果:
这部分当时想自定义个控件来实现,一直没有找到合适的方法。后来网上看到,有人说在顶部放个大小一样的Tab分页控件先隐藏,当tabview滑动到顶部时,滑动的隐藏,原来隐藏的再出现,这样也会有问题。后来我决定这部分能悬停的设置为tabview的sectionHeader,tableview设置为plain就可以实现悬停。
二.顶部导航栏被顶上去的效果:
以前做过的项目,用系统的导航栏,被坑过很多次。这次索性不用系统的导航栏,直接用和导航栏一样高度的view充当假的导航栏。然后在tableview的UIScrollviewDelegate代理方法里,根据便宜量,改变导航栏view的transform。这个地方刚开始是改变transform的height,后来发现有问题,就改为改变transform的y。
三.底部可以横向滑动的Tab和三个tableView:
分页Tab是作为tableview的sectionHeader,然后它本身底层是个scrollview,上面放了三个Button。下面其实是一个很大的cell,cell里放了一个scrollview,sacrollview里又放了三个tableview。sectionHeader里的scrollview和cell里的scrollview实现滑动联动。

这是整体结构图:
B952DE38-7439-485A-9884-401A722F94C2.png

方案二 :将需要悬停部分当做cell的子视图contentView,然后顶部悬浮地方,添加一个floatview。在floatview和cell之间切换子视图。

aaa.jpg
bbbb.jpg

在scrollViewDidScroll代理方法中,实现切换:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    float ofsetY = scrollView.contentOffset.y;
    float limitY = self.headerView.frame.size.height + 40*5;
    if (ofsetY >= limitY) {
        [self.floatView addSubview:self.suspendCell.contentView];
        self.floatView.hidden = NO;
    } else {
        self.floatView.hidden = YES;
        [self.suspendCell addSubview:self.suspendCell.contentView];
    }
}

Demo地址

如有不对或者有待完善的地方,或者更好的实现思路,欢迎大家留言指正。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 2,547评论 1 14
  • -1- 分开快两年了,不曾联系。 恰巧在一个陌生的城市相遇,他看到她,她也看到了他。 喝了杯饮料后一起逛街,路过一...
    彧言堂阅读 740评论 0 0
  • 人,从生,到长大,到结婚生子,到老,到死,“拥有”只是一个过程!开头和结尾都只能赤条条! 而幸福,...
    于卓君阅读 343评论 0 0
  • 乌鸦在天空中自由飞翔, 乌黑乌黑的就像夜未央。 一条条长长的银色光芒, 打破了沉静的基督教堂。 朝着紫霞弥漫开的海...
    彼得潘008阅读 157评论 0 1