如何使用手势通知启动和停止循环

时间:2014-07-25 15:07:44

标签: ios objective-c uicollectionview

当用户长按并将单元格拖动到可见单元格的任一侧时,我试图动态滚动UICollectionView。不幸的是,longPress只接收stateChanged的通知,但是如果他们的手指在正确的位置,我希望它继续滚动(即使它没有移动)。当用户将手指从边缘移开时,开始循环滚动视图然后停止它的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

我这样做的方式(这可能是不合适的)是听取触摸事件以及长按手势。 (长按可能会取消所有触摸事件,因此您可能需要手动长按)

当您长按对象时,您在类实例中设置了一个类似iAmLongPressing的变量。然后你开始听你的touchesMoved方法。一旦你足够靠近屏幕的边缘,你就会启动一个计时器,无论你想滚动页面多长时间都会触发它。如果您的用户的手指仍然在屏幕上并且在下一个计时器滴答(或10个计时器滴答,或其他)的边缘附近,则滚动到下一页。当您收到touchesEnded来电时,您将iAmLongPressing设置为false,当您的计时器注意到您不再按时取消时(或者您可以取消touchesEnded来电中的计时器为了安全起见。我没有你的代码示例,因为你没有提到你目前的工作方式,但它应该非常直接。只需修改计时器间隔和“页面边距”,直到感觉合适为止。

答案 1 :(得分:0)

我最终使用CADisplayLink启动和停止循环。我在手势开始时启动它,并使用它的选择器方法来确定是否应该滚动视图。然后,当手势结束时,我将其无效。

我的灵感来自这里:https://github.com/shusta/ReorderingTableViewController/blob/master/ATSDragToReorderTableViewController.m