iOS支付宝 9.x 版本首页效果

作者: SeeLee | 来源:发表于2016-10-11 16:25 被阅读4981次

支付宝 9.x 版本首页效果

对于新版支付宝首页的产品功能这里就不说什么了,一大堆人吐槽,我们只想要一个好好的支付工具,阿里硬是要融入社交...

今天这里不是来评论支付宝功能的,而是作为一个iOS开发人员在使用的过程中发现,首页这滑动好“怪异”啊~~

首先,右侧的滚动条的位置好怪!为什么在中间?只能说明一个问题,这个tableview是从这里开始的。

其次,既然tableview在中间开始,那上面那一片view是如何滚动的(从滚动条可以看出不是tableviewheader)?而且和tableview做到无缝衔接。

再次,滑动tableview上面那块view,直接响应滑动。

通过上面种种奇怪的现象,于是我决定针对这个效果些一个demo来玩玩。

demo地址: https://github.com/seedotlee/AlipayIndexDemo

因为是demo嘛,所以代码就尽量简单,处理就基本只放在一个class中,这样比较容易理解,大家就不要吐槽这一块了~~~

关键点

经过我反复实验,还是 UIScrollView + UITableView 的方式实现最靠谱,那问题来了,如何处理两个ScrollView的滑动冲突?

答案就是关掉一个滑动!当然就是关掉tableview的滑动,通过外层scrollview的offset来直接控制tableview的滑动,关键代码:


func scrollViewDidScroll(_ scrollView: UIScrollView) {

      let y = scrollView.contentOffset.y
      if y <= 0 {
          var newFrame = self.headerView.frame
          newFrame.origin.y = y
          self.headerView.frame = newFrame

          newFrame = self.mainTableView.frame
          newFrame.origin.y = y + topOffsetY
          self.mainTableView.frame = newFrame

          //偏移量给到tableview,tableview自己来滑动
          self.mainTableView.setScrollViewContentOffSet(point: CGPoint(x: 0, y: y))

          //功能区状态回归
          newFrame = self.functionHeaderView.frame
          newFrame.origin.y = 0
          self.functionHeaderView.frame = newFrame

      } else if y < functionHeaderViewHeight && y > 0{
          //处理功能区隐藏和视差
          var newFrame = self.functionHeaderView.frame
          newFrame.origin.y = y/2
          self.functionHeaderView.frame = newFrame

          //处理透明度
          let alpha = (1 - y/functionHeaderViewHeight*2.5 ) > 0 ? (1 - y/functionHeaderViewHeight*2.5 ) : 0

          functionHeaderView.alpha = alpha
          if alpha > 0.5 {
              let newAlpha =  alpha*2 - 1
              mainNavView.alpha = newAlpha
              coverNavView.alpha = 0
          } else {
              let newAlpha =  alpha*2
              mainNavView.alpha = 0
              coverNavView.alpha = 1 - newAlpha
          }

      }


  }

这里的关键就是当想上滑动的时候,实际就是滑动最外层的scrollview,然而想下滑动到顶的时候仅仅只讲offset传递给tableview让其继续滚动。

tableview嵌入方式借鉴了:

https://github.com/Zhanggaoyi92/Alipay-8.11-update-demo

相关文章

网友评论

  • PGOne爱吃饺子:哥们 你好,请问在设置cell的地方,我改了一下你的cellHeight,为什么就tableView就展示不全了啊
  • Dolphii:cell不能复用
  • PGOne爱吃饺子:大哥 你不能写个oc的么 :sob: :sob:
  • 小学生写代码:楼主能求份oc版的demo么
  • Henrya:快速下拉有bug,你可以优化下
    Henrya:在 func scrollViewDidScroll(_ scrollView: UIScrollView)方法里y <= 0时加入mainNavView.alpha = 1
    coverNavView.alpha = 0 可以解决快速下拉导致的导航栏bug
  • 强哥来简述:右侧滚动条在那个位置,不代表tableview就是那里开始的 ,滚动条的位置是可以调整的
  • 2bb5ebfd832c:如果tableview的内容高度不够翻页,下拉的时候就达不到支付宝的那个效果了怎么办
  • louisly:楼主,想请教一个效果,不过目前demo中没实现。
    支付宝的效果:手指按中“扫一扫”or“付款”,此时这些按钮是有高亮的,如果此时没有松开的手指顺势向下移动,按钮的高亮会取消,并且tableview还能同时向下滚动。
    目前demo效果:手指向下移动的时候,高亮取消,不过tableview不能继续滚动了。
    哈哈,比较纠结这些小效果。
  • barry:你这加上刷新有问题啊,禁用tableview的scrol始终不行
  • ifelseboyxx:我记得 tableView 有个 scrollIndicatorInsets 属性可以设置 滚动跳的位置,不知道支付宝是不是改的这个来达到这种效果的
  • 风格人:在iOS10.3.2,使用MJRefresh下拉刷新时,
    向下拖拽tableView一定距离,可以执行刷新动作时,tableView会突然复位到原来位置,再进行下拉刷新动作;
    没有搞清楚为什么😳
  • 94e75a86153b:仿照你写的,写了个OC版本的:blush:
    https://github.com/guoyutao/AliPayDemo
    PGOne爱吃饺子:@iOS_叶先森 你说的这个快速下拉bug是什么我怎么没有发现
    叶先森_iOS_前端:你这个与这个作者出现同样的问题:快速下拉有BUG 导致问题是 tableView与scrollView 滚动出现混乱,解决:在scrollView代理方法加上判断 if ([scrollView isEqual:self.mainScrollView]) { code... } 最后在 if (y <= 0) {} 里面加上 self.mainNavView.alpha = 1; self.coverNavView.alpha = 0;
    阿斯顿卡卡:cell不复用啊,内存消耗大
  • 6960c5e09fce:求OC的demo
  • 披萨配可乐:楼主,请问一下,我做这个demo的时候,当mainScrollView的contentOffset.y < 0 时,将偏移量给到tableview,这样就是造成mainTableView两倍的偏移,这如何解决,望回复
  • _YZG_:哥们,tableview不重用啊
  • _YZG_:哥哥,搞个OC的吧
  • 国强在线:我看你代码中tableview是加载到scrollview上的,关闭tableview的滑动,我就获取不到偏移量了。
    SeeLee:要获取的是scrollview的偏移量
  • 8f3d6aff9e32:楼主,我有点不明白,我用自定义的空间(就是自己写)可以实现效果,但是用storeboard拖拽好的uiview就实现不了,一直卡在scrollViewDidScroll这个方法里面。。。
    SeeLee:@Cooperluffy丨路飞 仔细看看demo里面有如何根据数据改变scrollview和tableview的contentsize
    Cooperluffy丨路飞:@SeeLee 问题解决了,但是有一个新的问题,TableView的frame怎么随着数据改变呢?
    SeeLee:... 崩掉这个描述也太笼统了吧,看看报什么错误就知道了啊。
    @Cooperluffy丨路飞 @苍鹰_5eea
  • Topredator:楼主 我做出来的会 一闪一闪的 而且下拉的快 headview也会跟着下话
    求解
    Cooperluffy丨路飞:@苍鹰_5eea 我也遇到这个问题了,你怎么解决的
    b7fb0e0c8568:为什么只有自定义的table可以,不自定义的就崩掉,和下楼的差不多
    SeeLee:@Topredator 什么阶段一闪一闪?对着demo找一下哪里不一样了?
  • 飞翔de小苹果:楼主用swift也得demo呀,没有oc版本的呢
  • 壹点微尘:期待楼主出个OC版的 :smile:
    SeeLee:@壹点微尘 这个效果的关键是理解实现原理,这个demo还达不到拿来即用的程度,所以出oc版没有什么意义的,建议自己动手去试试。
  • caobug:楼主威武级了
  • a73610582210:好尝试,可惜是swift 不熟悉
    SeeLee:@牧羊阿萨 这里的代码都很简单和oc区别不大,可以直翻译过去的。

本文标题:iOS支付宝 9.x 版本首页效果

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