取消UIScrollView
的触摸(example SO question)有很多答案。但是,普遍接受的答案(参见前面的示例)是通过直接取消scrollView的手势识别器来完成此操作,如下所示:
// Reset a scrollView's current 'touch'
scrollView.panGestureRecognizer.enabled = false
scrollView.panGestureRecognizer.enabled = true
我目前使用此解决方案的问题是它取消了scrollView平滑动画的功能,并在您尝试操作/动画化scrollView的{{1}时导致跳跃行为属性。
简而言之,我要做的是:一旦分页scrollView 达到当前页面上方的某个内容偏移,取消当前触摸滚动视图,动画回到当前页面,然后才允许再次接触。您可以将其比作一个包含一副卡片的scrollView,这些卡片只能在一个方向上滚动 - 如果您尝试在scrollView中返回(向上)一张卡片,您将停在某个偏移量并且滚动视图强制动画回到你所在的卡片上。
[注意 - 我知道还有其他更有效的方法可以通过手势识别器和自定义视图执行此操作,但我对scrollView的需求更加微妙]
下面的代码(通过我的scrollView的委托)取消当前触摸,但不允许动画发生。它只是“快照”回到原位。有趣的是,如果没有平移手势重置,动画确实会发生 - 当然,由于平移手势尚未重置,因此允许触摸继续拖动(即使contentOffset
设置为false)。
userInteractionEnabled
有什么想法?希望我错过了一些东西......
答案 0 :(得分:0)
事实证明,归因于暂时禁用panGestureRecognizer
的 snapiness 源于被分页的scrollView。因此,将scrollView.pagingEnabled
属性设置为false(临时在委托中)会为我解决它。
不确定为什么会以这种方式行事,但我会做更多的挖掘并可能提交错误报告。