如何在UIScrollView中使用拖放

时间:2010-03-21 03:29:55

标签: ios objective-c animation drag-and-drop touches

我正在尝试在UIScrollView中拖放UIViews。如果我拖动UIView使其与ScrollView的顶部或底部相交,我希望UIScrollView滚动。如果它接触顶部,它应该向上滚动。如果它接触到底部,它应该向下滚动。移动UIView使其不再与顶部或底部相交时,滚动应该停止。

我尝试的第一种方法是每当我检测到UIView与滚动视图的顶部或底部相交时启动NSTimer。计时器将逐位滚动UIScrollView,直到它失效。这导致非常不稳定的滚动,因为没有办法预测定时器何时会发射。

我目前的方法是简单地滚动到ScrollView的顶部或底部,如下所示:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:1.0];
[self.parentScrollview setContentOffset:newOffset animated:NO];
[UIView commitAnimations];

为了停止滚动,我尝试在touchesMoved:delegate中确定触摸的位置,并使用它来计算要用于scrollView的contentOffset。

问题是,当我尝试通过[[touches anyObject] locationInView:self]获取视图中的位置时,我得到了最终的结束位置,而不是当前位置。我猜这是因为scrollView上的contentOffset是立即设置的。

有没有办法在这样的情况下获得触摸的实际位置?或者在我中断滚动动画时设置contentOffset的任何其他方式?

1 个答案:

答案 0 :(得分:0)

这可能会迟到,但您可以尝试使用包含以下声明的新动画来中断旧动画:

    [UIView setAnimationBeginsFromCurrentState:YES];

您可以将新动画设置为非常短或零持续时间,然后设置委托并setAnimationDidStopSelector以获取最终contentOffset值。