如何在靠近边缘滚动的情况下拖动UIScrollView中的视图?

时间:2012-03-18 19:10:18

标签: ios uiscrollview drag-and-drop

我正在尝试在视频编辑器中创建某种时间轴视图:连续的媒体元素,UIView。我可以使用UIScrollViewtouchesBegan之类的touchesMoved触摸事件在滚动视图的当前可见部分内成功拖动这些视图。我想在子视图拖动到其中一个滚动视图边缘时滚动滚动视图。我现在能想到的最好的方法是创建一个计时器,当用户用手指靠近滚动视图边缘保持子视图时,该计时器将滚动视图。

这里有很多关于同一主题的问题,但是我无法找到一个涵盖滚动的问题。

这样做有好办法吗?我应该使用手势识别器吗?

提前谢谢。

2 个答案:

答案 0 :(得分:8)

实际上你想要的是一个定时事件。很快,当用户位于滚动视图的边缘时,您启动一​​个计时器,该计时器会定期增加contentOffset。如果你不喜欢你的动画结果(我猜你正在使用setContentOffset:animated:?),只需尝试另一个时间和动画距离..我想你必须尝试一些不同的设置。我首先尝试的是一次1px。也许每0.3秒?

如果这不起作用,你也可以尝试另一个“极端”。当用户到达边缘时,启动单个动画,动画化contentOffset直到contentSize结束。但是在很长的时间内,运动速度很慢。如果用户停止拖动或移出边缘,请在当前位置停止动画。这甚至可以是没有计时器的解决方案,因为动画本身就是你的计时器。

答案 1 :(得分:0)

我非常怀疑手势识别器会成为一个很好的解决方案,因为它们对于谨慎的手势往往最有帮助。

我不认为我可以根据上面暗示的假设,即你正在寻找连续/渐进的滚动来改进你的总体方向。

我建议您改为考虑将其设计为使用分页滚动方法。当您的用户将对象拖动到滚动视图的边缘时,使滚动视图沿该方向移动一页(通过将contentOffset设置为根据滚动视图的边界在该方向上移动)。当发生这种情况时,将对象略微移出滚动视图边缘的“热区”,以便用户被迫明确表示他们想要移动另一个页面,或沿着这些行移动的东西 - 也就是说,设计方法依赖于这种“分页事件”,你需要实现某种姿势系统,以便用户保持分页。

我想你可以在相同的情况下使用计时器,这样如果用户保持位置并再触摸一秒,你就会再次翻页。