关于 iOS 手势交互的一个问题,问了一圈居然无人能解,难道在 iOS 上实现这个手势交互是个无解的难题?

2018-04-19 08:28:19 +08:00
 forkon

[前提] scrollViewA 和 scrollViewB 在同一个父视图里面,不嵌套,且 scrollViewA 在 scrollViewB 的之上。

[要实现的交互] 手指先是在 scrollViewA 里面向上滑动,当 scrollViewA 滚动到最底下时,scrollViewB 接着滚动,这个过程中手指从未抬起(相当于 touch 事件从 scrollViewA 传到了 scrollViewB ?)。

+-----------------------------------+ | | | | | | | | | | ^ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | scrollViewA | | | | | + | | | | | | | +---------------------------+ | | | | | | | | scrollViewB | | | | | +-----------------------------------+

11911 次点击
所在节点    iDev
60 条回复
dreamCatcher
2018-04-19 12:25:06 +08:00
问题很复杂很怪,往往是问题问错了
肯定有其他办法解决源头问题
cnbobolee
2018-04-19 12:40:18 +08:00
@forkon 最好不要这么干,首先手势不产生行为的话是没有事件触发的(这个哪个平台都是这样设计的),还有就是你说的临时取消之类的操作,这个操作理论上是可以的,实际操作后不会随时变化的,环境太复杂。
snail1988
2018-04-19 12:49:59 +08:00
@forkon 我说的方案 1 有个人写了个 demo 你看看是不是能达到你要的效果
https://github.com/indulgeIn/YBMultistageScrollView
forkon
2018-04-19 13:10:07 +08:00
@snail1988 虽然和我要的效果有比较大的出入,但有一定的研究价值。
xi_lin
2018-04-19 13:11:40 +08:00
nathanw
2018-04-19 13:23:36 +08:00
我来终结此贴吧。

https://github.com/maxep/MXParallaxHeader
看主要看第三个 demo.

解决方法:
B 放在 A 里面,A 的 contentInset 的 bottom 设置大一点。
设置 A 和 B 一起滑动,但通过 KVO 判断,使得其中一个滑动被还原,即没产生滑动效果。
具体参考代码。
我做了 2 个 tableView 的嵌套,用这个库改了下自己用。

hittest 没有用,
1.衔接的部分如果滑动未停止,手势的对象是无法突然改变。
2.如果 scroll view C 并列放 A 和 B,这样 A 和 B 有其他点击操作会出问题。
nathanw
2018-04-19 13:35:26 +08:00
补充楼上:
1. 加 UIPanGestureRecognizer,滑动效果很差,和 scollview 的不一样.
2. hittest 时还不知道是 pan 还是 tap,所以无法决定手势传给谁. a b 并列放不可行.
nathanw
2018-04-19 13:58:30 +08:00
还有,代码里面有个 cancelsTouchesInView 最好改为 YES
spongebobsun
2018-04-19 16:59:46 +08:00
这问题感觉像上个月碰到的一个面试题。。。
expkzb
2018-04-19 17:56:31 +08:00
军儿
forkon
2018-04-19 19:08:22 +08:00
@expkzb 哪哪都能碰到你 哈哈
forkon
2018-04-19 19:09:57 +08:00
@nathanw 稍微有点遗憾 还终结不了
w99wen
2018-04-19 20:10:40 +08:00
baseview 添加 pan,scroll1 的 offset 加 kvo,scroll 到底,scroll1 userinteraction = NO,pan 接收 gesture,控制 scroll2 的 offset。
wezzard
2018-04-20 02:16:10 +08:00
這個很容易,多看看 WWDC
ybh37
2018-04-20 07:55:32 +08:00
事件捕获、手势事件穿透、底层 View 动画控制
不难啊
不清楚这种交互为什么被描述的这么复杂?
kitalphaj
2018-04-20 08:07:26 +08:00
哈哈,以后 iDev 的发帖都请参考这个标题,不然这些大佬不会出来回复的哈哈哈哈哈
wsj195328
2018-04-20 09:02:27 +08:00
手势代理判断当前 view
C90
2018-04-20 09:03:22 +08:00
@forkon 确实 hittest 无法发挥作用
@ybh37 大神能否出个 demo ?
HelveticaNeue
2018-04-20 13:27:37 +08:00
@ichanne 应该是抄的 Twitter 个人页
我做过一个差不多的。挺麻烦的。我是抄的微博。Twitter 怎么实现的看不出来
楼主用 Reveal 看一下微博的个人页应该就明白了
ostholz
2018-04-20 19:00:44 +08:00
个人感觉有点困难, 我们的 App 也涉及到这样的问题, 比你这个还要复杂. 至今也没有好解决办法.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/448015

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX