如何创建SnapChat TableView效果

时间:2016-05-24 02:50:24

标签: ios uitableview uiviewcontroller uiscrollview snapchat

我设置了我的应用程序,以便用户可以向左或向右滑动以在视图控制器之间导航,类似于SnapChat。我使用启用了分页的UIScrollView实现了这一点。

我想要实现的SnapChat的一个功能是用户能够在tableview中选择一个单元格,开始将其滑过,然后让单元格在某个点之后“锁定”,允许用户能够在屏幕上拉出整个视图。如果您还没有使用过SnapChat,这可能有点难以描绘,所以我已经包含了我正在谈论的图像:

enter image description here enter image description here

我应该如何使用UIScrollView实现此功能?

目前,我的ScrollView中的一个视图控制器有一个UITableView,其自定义UITableViewCells包含手势识别器,允许他们在检测到滑动时滑过。一旦手势识别器检测到大于一定量的平移,单元格就会相对于视图控制器停止滑动,整个滚动视图开始滑动。

这大致达到了与SnapChat相同的效果,但它看起来不太好并且非常多。例如,如果用户试图轻弹tableview单元格(就像人们经常在SnapChat中那样),那么就会击中粉丝。

SnapChat对该功能的实现给人的印象是,在将单元格滑动一定量后,用户“保留对滚动视图的控制”。这是一种非常优雅的用户体验,我不确定如何复制它。

如果我应该提供任何其他有用的信息(例如我目前为止的代码),请告诉我。

1 个答案:

答案 0 :(得分:2)

我实现此功能的方法是通过子类化UITableViewCell并向单元格添加 UIPanGestureRecognizer ,以及在单元格本身顶部的“叠加视图”,其中包含按钮,背景图像或其他任何需要在单元格上。

使用recognizer.translationInView(self),我能够准确找出用户的触摸已经翻译了多少,然后相应地调整了叠加视图的原点,因此所有用户元素都会显示为幻灯片。当叠加视图被翻译时,它会显示我直接添加到单元格本身的视图。

手势识别器翻译超过某个阈值后,我会手动调整UIScrollView的内容偏移量,就像我对单元格一样。