在 UIScrollView 仍处于活动状态的情况下检测视图中的连续触摸位置
Posted
技术标签:
【中文标题】在 UIScrollView 仍处于活动状态的情况下检测视图中的连续触摸位置【英文标题】:Detect continuous touch position in view with UIScrollView still active 【发布时间】:2016-06-01 06:57:24 【问题描述】:我有兴趣在视图控制器的视图中获取触摸位置(例如,或模仿 touchesMoved
),同时仍保持启用 UIScrollView
子视图。由于所有touchesDidSomething
方法都被UIScrollView
使用,我希望有一种迂回的方式来实现这一点。
以下是我尝试过的一些事情:
子类化 UIScrollView
,覆盖它的 touchesMoved
方法并将该触摸信息传递给我的 scrollView's
视图控制器中的 custom delegate
方法。 --> 如果我在滚动 view
上取消选择“可取消的内容触摸”和“延迟内容触摸”,这实际上有效,但它会阻止滚动 view
滚动。
使用与上述相同的策略,但将子类 UIView
作为我的UIScrollView
的兄弟。因此,层次结构如下:
view
UIScrollView
Subview
Subview
CustomUIView
delegate的自定义UIView
这两种方法都可以在我可以抓取数据的范围内工作,但代价是我的滚动视图不再滚动。我知道我可以在类似于touchesBegan
的UIScrollView
中获取触摸事件的位置,而scrollView
继续工作,但我还没有找到在滚动时获得连续触摸事件的方法。这可能吗?
这是我所追求的插图:
对于一些关于我为什么要寻找这个以及为什么抓取像 scrollViewDidScroll
的 contentOffset.x
这样的东西不起作用的元数据,我特别感兴趣的是 scrollView
何时滚动到最后(或开始)并且用户试图继续向前(或向后)滑动,即使scrollView
不能再向滑动方向滚动。发生这种情况时,我想检测向前(或向后)滑动动作以启动到另一个视图的平滑过渡。
【问题讨论】:
如何检测ParentView上的触摸,并用UIScrollview中添加的子视图转换触摸的位置?供参考检查this 【参考方案1】:我通过在我的视图中添加一个平移手势识别器并使用它的translationInView
方法解决了这个问题(UISwipeGestureRecognizer
没有这个方法)。下面的例子
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(myMethod(_:)))
panGesture.delegate = self
self.addGestureRecognizer(panGesture)
func myMethod(sender: UIPanGestureRecognizer)
// sender.translationInView(self).x
还要确保在 UIGestureRegognizerDelegate
中为 shouldRecognizeSimultaneouslyWithGestureRecognizer
返回 true 以说明滚动视图。
【讨论】:
以上是关于在 UIScrollView 仍处于活动状态的情况下检测视图中的连续触摸位置的主要内容,如果未能解决你的问题,请参考以下文章
存在-db restxq 触发器:服务已删除但仍处于活动状态