【问题标题】:How to use drag and drop within a UIScrollView如何在 UIScrollView 中使用拖放
【发布时间】:2010-03-21 03:29:54
【问题描述】:

我正在尝试在 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: 委托中确定触摸的位置,并使用它来计算用于 scrollView 的 contentOffset。

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

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

【问题讨论】:

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


    【解决方案1】:

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

        [UIView setAnimationBeginsFromCurrentState:YES];
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-17
      • 2011-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多