【问题标题】:How to create SnapChat TableView effect如何创建 SnapChat TableView 效果
【发布时间】:2016-09-21 01:52:17
【问题描述】:

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

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

我应该如何使用 UIScrollView 来实现这个功能?

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

这大致达到了和 SnapChat 一样的效果,但是看起来不太好,而且有很多 bug。例如,如果用户试图轻弹 tableview 单元格(就像人们在 SnapChat 中经常做的那样),s**t 会击中风扇。

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

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

【问题讨论】:

  • 你知道怎么做了吗?
  • @lapin 是的!我会发布我是如何做到的。

标签: ios uitableview uiviewcontroller uiscrollview snapchat


【解决方案1】:

我实现此功能的方式是继承 UITableViewCell 并向单元格添加 UIPanGestureRecognizer,并在单元格本身顶部添加一个“覆盖视图”,其中包含按钮,背景图像,或任何其他需要在单元格上的东西。

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

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

【讨论】:

  • 你能解释更多吗?我正在尝试实现这一点,但我不明白如何停止在单元格上移动视图并开始滚动页面而不停止相同的触摸。
  • 使用 if 语句来检查单元格是否平移了一定距离,如果没有,则随着触摸继续移动单元格。如果有,则改为移动主滚动视图。
  • 您的自定义单元格中是否有该逻辑?因为我不知道如何从单元格类中移动滚动视图。
  • 保留对它的引用。初始化表格视图单元格时,只需在其中设置一个属性等于表格视图。然后,您可以在 tableview 中拥有可以调用该实例上的方法的方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-13
  • 2014-02-09
  • 2021-11-11
  • 2011-01-10
  • 1970-01-01
  • 2013-11-09
  • 2015-06-29
相关资源
最近更新 更多