iOS项目源码分析

模仿 QQ 消息页面 cell 的滑动效果

2015-12-22  本文已影响662人  redye

QQ 的消息界面,cell 滑动出现删除、标记已读、置顶按钮,这里只是做一个高仿的布局页面。

拆解

分析 QQ 消息页面滑动的动画,将其拆解成一下几步:

  1. 向左拖动,效果类似表的滑动删除,但又不一样,cell 左滑的距离与手指拖动的距离相等;拖动的最大距离为按钮宽度之和。
  2. 当拖动结束或取消时,若此时拖动的距离小于按钮宽度之和的一半,则cell 回到原点,否则滑动到左侧,宽度为按钮宽度之和。
  3. 若 cell 此时的状态是已经打开的状态,拖动则关闭 cell。
  4. 点击 cell,若 cell 是打开状态,则关闭 cell。
  5. 当滑动表的时候,若有 cell 呈打开状态,则关闭。
  6. 当有 cell 的状态是打开状态,此时拖动其他 cell,则关闭打开状态下的 cell,拖动的这个 cell 不做打开操作。

思路

因为要实现的功能并非是 tableView 的滑动操作,虽然动画效果很类似,实现思路是在 cell 上添加所需要的按钮,然后在叠加一层 容器,用来显示消息相关的组件。UI 与约束方面的东西这里就不做赘述。值得注意的一点是,这里将 容器 的 leading 约束作为动画的切入点。
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *leftContraint;

实现

至此功能基本上实现了,细心的话也许能够发现,拆解6并没有实现,虽然有点模糊的想法,但是觉得效果并不是很好,而且这里取巧了一点,就是将 cell 的 selectionStyle 设为 none 了,否则点击 cell 的时候会透出地下三个按钮的标题。
对比 QQ 的消息页面,感觉还是不太一样的,感觉他用的就像是系统的“滑动删除”,因为他的动画效果和“删除”按钮出现和消失的时机都是相同的,如果有大神知道他的实现方式,请不吝赐教。
代码存在的漏洞之处,欢迎指正。

效果图

最后来一发效果图(我果然还是图控,没图总感觉少了点啥 😊)。


QQ2.gif

代码请戳这里
参考请点击链接

上一篇下一篇

猜你喜欢

热点阅读