如何计算运动中 UIScrollView 的目标 contentOffset

Posted

技术标签:

【中文标题】如何计算运动中 UIScrollView 的目标 contentOffset【英文标题】:How to calculate the destination contentOffset of a UIScrollView in motion 【发布时间】:2011-02-07 16:23:53 【问题描述】:

我使用 UIScrollView 作为使用核心动画的组件的基础。当用户滑动视图时,我想根据滚动视图的目标(静止)位置定位元素。为此,我需要在 scrollViewWillBeginDecelerating: 方法或类似方法中计算 UIScrollView 的目标 contentOffset。

我需要这个的原因是我将使用目标 contentOffset 将嵌套在滚动视图的 contentView 中的视图动画到它们的最终位置。我当然可以在 contentOffset 或类似内容上设置一个观察者,但这会导致动画混乱,因为嵌套视图会在减速期间多次更新它们的位置。我希望这种情况只发生一次。

有没有简单的方法来做到这一点?

【问题讨论】:

看来其他人也有这个需求:***.com/questions/1651560/… 【参考方案1】:

有一个委托方法:

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset NS_AVAILABLE_ios5(5_0);

根据文档:

如果用户拖动,则在手指向上调用。速度以点/秒为单位。可以更改 targetContentOffset 以调整滚动视图停止的位置。 pagingEnabled 为 YES 时不调用

【讨论】:

【参考方案2】:

不确定你是否还需要这个。但这就是你如何获得 UIScrollView 的委托。

 -(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
NSLog(@"X offset: %f", targetContentOffset->x);
NSLog(@"Y offset: %f", targetContentOffset->y);

【讨论】:

【参考方案3】:

您是否需要提前知道滚动视图将在哪里停止的具体原因?您可以在滚动视图委托的实现中将视图放置在 layoutSubviews(如果您继承 UIScrollView)或 scrollViewDidScroll: 中。

【讨论】:

嗨,是的。我将使用该位置将嵌套在滚动视图的 contentView 中的视图设置为最终位置。我当然可以在 contentOffset 或类似内容上设置观察者,但这会导致动画混乱,因为嵌套视图会在减速期间多次更新它们的位置。【参考方案4】:

我相信您指的是pagingEnabledUIScrollView 上自动提供的行为。从UIScrollView 上的iOS Reference Library 开始,当启用分页时,“当用户滚动时,滚动视图会在滚动视图边界的倍数处停止。”我一直使用这种行为,我相信这就是你所描述的。它为您处理所有繁重的工作 - 只需设置一个属性!

更新:我想我误解了你的问题。您可以随时检查UIScrollViewcontentOffset 属性以确定其在滚动视图中的当前原点。您可以在其中一种委托方法中执行此操作,可能是 scrollViewDidEndDecelerating:

【讨论】:

是的,你可以得到当前的contentOffset,但是我需要目的地的contentOffset... 在滚动视图停止移动之前如何知道最终的 contentOffset?

以上是关于如何计算运动中 UIScrollView 的目标 contentOffset的主要内容,如果未能解决你的问题,请参考以下文章

国科大人工智能学院《计算机视觉》课 —运动视觉—视觉跟踪(目标跟踪视觉定位)

国科大人工智能学院《计算机视觉》课 —运动视觉—视觉跟踪(目标跟踪视觉定位)

canvas链式弹性运动

目标跟踪基于Kalman滤波跟踪视频运动目标matlab代码

UIScrollView - showsHorizo​​ntalScrollIndicator 是如何计算的?

运动目标检测_混合高斯背景建模