0

我正在尝试在 UIScrollView 中拖放 UIView。如果我拖动 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: 委托中确定触摸的位置,并使用它来计算用于滚动视图的 contentOffset。

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

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

4

1 回答 1

0

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

    [UIView setAnimationBeginsFromCurrentState:YES];

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

于 2010-09-23T17:13:31.330 回答