美文网首页iOS技术点
iOS 仿微博、闲鱼、转转等APP 满足垂直滑动视图,扩展水平滑

iOS 仿微博、闲鱼、转转等APP 满足垂直滑动视图,扩展水平滑

作者: 早起的小孩没饭儿吃 | 来源:发表于2018-01-05 15:54 被阅读417次

先放个代码链接
(微博模式):https://github.com/qussers/IZJHorizontalTableView
(闲鱼模式):https://github.com/qussers/IZJVerticalHrizontalView
这类APP普遍满足多个或全部特点:
1、存在一个头部视图,或者说垂直滑动的视图。
2、在垂直滑动的视图下方,一般还有个停驻的视图。
3、在停驻视图下方,存在水平切换的多个视图。
4、水平切换的视图中,包含垂直滑动视图。并且垂直的滑动能联动头部视图的滑动。
5、头部视图的响应链本身完整。
6、整体的垂直滑动能够丝滑,并且有弹簧效果。

微博的效果和闲鱼或者转转等二手交易平台的滑动效果不同点在于,微博的头部滑动止于停驻视图,而类似闲鱼的这种,贯穿整个视图。两种效果的实现方案各不相同,下面分开说。

第一种:继承自UITableVIew
适用情况: 垂直方向有大量视图需要加载,列表比较长,自定义性能要求高。
层级结构:
0:UITableView
1: TableVIew的Footer添加CollectionView
2: CollectionView添加横向滑动的ScrollView
要点:
通过重写

  • (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer ;
    达到底层TableView能够相应上层滑动的效果。
    为了优化体验,对水平和垂直加速度进行判断,规避双方向滑动。
    通过监听各自ContentOffset从而控制各层ScrollView联动。

第二种:继承自UIView
适用情况:垂直headerVIew比较轻量,多类似头部视图高度较小。
层级结构:
0:UIView
1:UIView->UICollectionView
2: UICollectionView->ScrollView
3: ScrollView-> HeaderView
要点:
横向滑动时,偷梁换柱, 数据源传入ScrollView,并设置ContentInset, 将HeaderView从ScrollView上转移添加到UIView上,横向滑动结束后,再切换到ScrollView。头部视图添加一个父视图(这里我用了一个ScrollView稍稍扩大了下contentSize的宽度),接收横向滑动响应链条,从而阻断下层的横向滑动响应。

image.png

更一般的自定义效果如:


横向滑动2.gif

相关文章

网友评论

  • 胡子仙森:微博模式下有两个滚动条,能统一成一个吗
  • 青鸟evergreen:楼主微博模式下横向滑动的contentsize是写死的,如何做到高度自适应啊
  • jozdee:大神,厉害👍
  • __blossom:兄弟,你这demo写得这个真棒!但是那个微博模式的我发现个bug,self.tableview的row设置行数较少的话,下面的滚动视图滑动显示不全了。
    胡子仙森:@__blossom 确实是这样,找到怎么回事了吗,试了好多方法也没解决这个问题
    __blossom:我试了一下,self.tableView 的行数设置少于19就会出现这个bug
  • A张三疯:兄弟,有一个问题,当头部视图高度大于屏幕高度时,segmentView会在初始化的时候停留在屏幕底部
  • A张三疯:兄dei,你很棒,写的很不错,思路清晰!给你一个大大的赞

本文标题:iOS 仿微博、闲鱼、转转等APP 满足垂直滑动视图,扩展水平滑

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