3

这里的第一个问题,很好:P

我正在尝试制作一个无限的 UIScrollView(我使用了“StreetScroller”苹果演示项目)。当 UIScrollView 快到 contentSize 的末尾时,contentOffset 设置为 contentSize 的中心,所有子视图都被移动,因此对用户来说是透明的。

当您缓慢滚动时它可以正常工作,但是当您滚动太快并且到达 UIScrollView 的末尾时,事情变得很奇怪。

在我的情况下,我使用带有 frame.size.width = 320 和 contentSize.x = 3 * frame.size.width 的 UIScrollView。这就是当您滚动太快并且到达 contentSize 末尾时日志中发生的情况(因此,如果向右滚动时 x > 560):

--> UIScrollView 因为惯性而滚动

SetContentOffset called width x : 504.730072
SetContentOffset called width x : 516.878967
SetContentOffset called width x : 528.489990
SetContentOffset called width x : 540.347656
SetContentOffset called width x : 550.754028
SetContentOffset called width x : 561.200378

--> UIScrollView 到达 contentSize 的末尾,所以我们居中

The next call of setContentOffset is for recentering the view
SetContentOffset called width x : 320.000000

--> 这是问题所在,UIScrollView 没有考虑 contentOffset.x 的变化,它使用最后使用的 contentOffset.x 值继续动画....

SetContentOffset called width x : 571.421753
The next call of setContentOffset is for recentering the view
SetContentOffset called width x : 320.000000
SetContentOffset called width x : 581.283447
The next call of setContentOffset is for recentering the view
SetContentOffset called width x : 320.000000
SetContentOffset called width x : 610.100952

这一直持续到动画结束。

如果有人有设置 contentOffset 并强制 UIScrollView 更新其动画的解决方案:)

我几乎阅读了 stackoverflow 和其他网站上关于无限 UIScrollView 的所有主题,但我没有看到任何在动画期间更改 contentOffset 的有效解决方案,我尝试在所有不同的 UIScrollView 委托方法中重新定位。而且我不想在滚动期间更改 contentSize (它仅在您向右滚动或 bot 时才有效......)

4

1 回答 1

0

我刚刚在 iOS Simulator 4.3 中运行的 Apple StreetScroller 示例中注意到了这个问题。

我在这里看到了这个问题:Infinite UIScrollView 在 iOS4.3 而不是 iOS5 中出现了奇怪的行为,并且刚刚在 iOS 5 模拟器中进行了测试,并且可以确认它在那里按预期运行。

不知道 4.3 中的相同代码有什么问题。

于 2012-01-13T22:51:40.330 回答