【发布时间】:2021-10-10 06:49:34
【问题描述】:
问题
我有一个包含UIView 的UIScrollView,我希望允许用户使用UIPanGestureRecognizer 进行平移。
为了使其按预期工作,用户应该能够用一根手指平移视图,但 也 能够用另一根手指平移滚动视图 - 在同一时间(每个用一根手指)。
但是,当用户平移其中包含的视图时,滚动视图将停止工作。在视图的平移手势结束之前无法平移它。
尝试的解决方法
我尝试通过覆盖以下 UIGestureRecognizerDelegate 方法来同时滚动平移视图和包含它的 UIScrollView 来解决此问题:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
然而,这使得平移视图也移动滚动视图。每个元素的平移手势应该相互独立,而不是链接。
演示项目
我创建了一个简单的演示项目来演示这一点,在这里:
https://github.com/jeffc-dev/ScrollViewPannerTest
这个项目包含一个带有方形视图的滚动视图,应该能够独立于其包含的滚动视图进行平移,但不能。
我为什么要这样做
这样做的目的是让用户更容易/更快地找到将视图平移到的目标。这有点类似于在 Springboard 中重新排列图标:您可以用一根手指平移应用程序图标,同时同时用另一根手指在页面之间平移,快速找到放置它的位置.我没有使用分页滚动视图——只是一个普通视图——我希望它是一个无缝的平移手势(我不需要/希望用户必须进入“摆动模式”),但基本原则是一样的。
更新:DonMag 提出了使用UILongPressGestureRecognizer 将视图移出滚动视图以进行平移的想法,这似乎很有希望。但是,如果我走那条路,我想我需要在这样做之后无缝过渡到使用UIPanGestureRecognizer(因为我确实使用了一些平移手势识别器特定的功能)。
【问题讨论】:
标签: ios uiscrollview uikit uigesturerecognizer uipangesturerecognizer