水平视差滚动UIScrollView iOS

5
我正在尝试在分页滚动视图上实现水平视差效果,使得一个视图在x方向上似乎更快地前进,但在同一位置“着陆”(例如,假设为(0,0))。以下是我的一般设置/视图层次结构:
  • (透明滚动条,拦截/通过滚动事件)
  • (对象覆盖层,我想让它以1.2倍的速度在x方向上移动,但不超过其“落脚点”)
  • (另一个覆盖层,我想让它以1.0倍的速度在x方向上移动)
我知道这与修改contentOffset有关,我已经设置好了我的代理,以便它们都可以以相同方向的1倍速度移动...有什么解决方案的提示吗?
1个回答

3
如果您想保留当前设置,您只需使用正在跟踪滚动事件的scroller的-(void)scrollViewDidScroll:(UIScrollView *)scroller委托方法。在此方法中,您将跟踪内容偏移量,然后使用速度乘数将其他视图移动到所需位置。
但是,您可以仅使用2个滚动视图轻松完成此操作,当一个滚动时,您可以在同一-(void)scrollViewDidScroll:(UIScrollView *)scroller委托方法中跟踪其contentOffset并相应地移动另一个。
此外,如果两个滚动视图的大小不同,则可以通过在-(void)scrollViewDidScroll:(UIScrollView *)scroller委托方法中跟踪contentOffset,然后使用该值和scrollview的contentSize来获取滚动视图移动了多远的百分比,并简单地设置次要滚动视图的contentOffset以滚动其contentSize的该百分比,从而实现自然的视差效果。
如果需要进一步解释,请告诉我。

我该如何让次要视图每次都落在同一位置?两个滚动条的contentSize应该相同吗?该应用程序是App Store上的Instago,我希望主页幻灯片中显示位置的彩色框根据触摸以不同的速率移动。我需要层以不同的速率移动,我不太确定将层作为其他层的百分比移动如何帮助实现这种效果。 - nmock
如果你想要下载一个具有我所说影响的应用程序,请查看 https://itunes.apple.com/us/app/american-revolution-interactive/id489614145?mt=8 (免费)。在这个应用程序中,背景和时间轴(前景)有不同的宽度。因此,每个元素移动相同的百分比,但前景的10%比背景的10%多一些像素,因此前景似乎移动得更快。如果您想保持相同的contentSize,仍然可以选择更快地移动其中一个,但是移动得更快的那个将必须在移动得更慢的那个停止移动之前停止移动。 - Jason Grandelli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接