zhongwuzw / WebBrowser

iOS浏览器 Web Browser for iOS
https://github.com/zhongwuzw/WebBrowser
MIT License
375 stars 92 forks source link

作者你好,请教一个技术问题 #26

Open ghost opened 5 years ago

ghost commented 5 years ago

如果我想全屏(而非屏幕边缘)切换tab页,我该如何解决原生的全屏滑动手势和网页轮播图滚动之间的冲突?我期望达到的效果是像其他浏览器一样,手指在网页轮播图滚动时,原生滑动手势不响应,反之响应。

kapture 2019-03-05 at 15 45 13

zhongwuzw commented 5 years ago

@whatsbug 我觉得首先原理是如果手势触发点在轮播图中, 就让我们自己的pan gesture失败,UIScrollView滑动的手势应该是UIWebTouchEventsGestureRecognizer,也就是说,判断触发点在轮播图中,就可以让自己的pan gesture 失败。 所以怎么判断是在轮播图里? 可以看一下轮播图的视图层级有没有特殊的结构,如果没有,需要注入js代码去识别网页是否包含轮播图,以及轮播图的位置,得到之后就很好处理了。

ghost commented 5 years ago

获取轮播图的位置信息有点棘手😂

zhongwuzw commented 5 years ago

@whatsbug 哪个iOS版本的浏览器实现了你所要的功能呢?我看一下,因为本身轮播图就有很多种实现,CSS,JavaScript都可以实现。本质上讲,就是普通的HTML标签.

ghost commented 5 years ago

iOS版的夸克是可以的。。

zhongwuzw commented 5 years ago

@whatsbug 大概验证了一下,其实它做的也有问题,我试了一下优酷首页轮播图的滑动,屏幕的手势会干扰到轮播图的滑动,基本导致无法运行,偶尔好像还可以,所以我理解应该方法类似,从js中监听touch事件,判断touch相关的空间是否可滑动,若不可滑动,web端将事件回调回native端,native端来做屏幕切换手势识别。

2019-03-07 15_32_32

ghost commented 5 years ago

其他什么问题我倒是没有发现,发现唯一一点体验不好的是,它的全屏返回/前进手势必须要网页停止上下滚动时才会触发😂,应该是shouldRecognizeSimultaneouslyWithGestureRecognizer代理方法没返回YES..

zhongwuzw commented 5 years ago

@whatsbug 是的。所以实现方法我目前觉得只有一个,就是js判断touch位置进行回传,应该没有别的方法了,因为轮播图也只是普通的CompositingLayer

ghost commented 5 years ago

嗯嗯,感谢提供思路笔芯