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

我还要实现的SnapChat的一项功能是,用户可以选择表格视图中的单元格,开始将其滑动,然后在特定点之后将单元格“锁定”,从而使用户能够在屏幕上拉整个视图。如果您从未使用过SnapChat,这可能很难想象,所以我提供了我所谈论的图像:

ios - 如何创建SnapChat TableView效果-LMLPHP
ios - 如何创建SnapChat TableView效果-LMLPHP

如何使用UIScrollView实现此功能?

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

这大致可以达到与SnapChat相同的效果,但是看起来并不好,而且非常容易出错。例如,如果用户尝试轻按表格单元格(就像人们经常在SnapChat中一样),则必定会吸引粉丝。

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

如果我需要提供其他有用的信息(例如到目前为止的代码),请告诉我。

最佳答案

我实现此功能的方式是通过子类化UITableViewCell并向该单元格添加一个 UIPanGestureRecognizer ,以及在该单元格本身顶部的“叠加视图”,其中包含按钮,背景图像或其他需要打开的内容细胞。

使用recognizer.translationInView(self),我能够准确地找出用户的触摸转换了多少,然后相应地调整了叠加视图的原点,因此所有用户元素似乎都在滑动。随着叠加视图的翻译,它将显示出我直接添加到单元格本身的视图。

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

08-18 00:57