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

支付宝 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

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,124评论 25 708
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,206评论 4 61
  • 贺薇是我们上初中时,班里最美的女生。但我一直不喜欢她这个名字。她学习刻苦,但成绩一般,可是人品特别好。 后来分开多...
    命自我立阅读 747评论 6 5
  • 不知能否相聚于冰岛某地方小心在冰岛给我发了一些照片很喜欢突然发觉或许某些事情并不困难比如冰岛并不那么要不可及比如冰...
    谢七阅读 287评论 0 0
  • 1收到了“美丽”的礼物,送我的一箱石榴真好吃,又大又多汁,看到这个好吃的能够来到我的面前,一定是过去分享美食。本来...
    西红柿的小姑娘阅读 179评论 0 1