我试图在UIScrollView中的UIView上创建一个视差效果.
效果似乎有效,但效果不好.
效果似乎有效,但效果不好.
>首先,我将两个UIView子视图添加到UIScrollView并设置UIScrollViews contentSize.
>视图总结并创建一个{320,1000}的contentSize.
>然后我在scrollViewDidScroll中实现了以下内容:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat offsetY = scrollView.contentOffset.y; CGFloat percentage = offsetY / scrollView.contentSize.height; NSLog(@"percent = %f",percentage); if (offsetY < 0) { firstView.center = CGPointMake(firstView.center.x,firstView.center.y - percentage * 10); } else if (offsetY > 0){ firstView.center = CGPointMake(firstView.center.x,firstView.center.y + percentage * 10); } }
这些代码行确实产生了视差效果,但是随着滚动继续,如果我滚动到原始的起始位置,则视图不会恢复到原始位置.
我已经尝试操纵视图层和框架,都具有相同的结果.
任何帮助将不胜感激.
解决方法
您所遇到的问题是您将基于偏移量与缩放比例的次要滚动,而不仅仅是当前的偏移量.所以当你从99的偏移增加到100(100)之后,你的辅助卷轴会增加10个,但当你回到99时,你的辅助卷动只能减少9.9,因此不再是这是最后一次你在99.非线性滚动是可能的,但不是你这样做的方式.
一个可能的更容易的方式来处理这个是创建一个第二个滚动视图,并将其放在实际的滚动视图之下.使它变得非难处理(setUserInteractionEnabled:false),并在主滚动委托期间修改它的contentOffset,而不是手动移动UIImageView.
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { [scrollView2 setContentOffset:CGPointMake(scrollView.contentOffset.x,scrollView.contentOffset.y * someScalingFactor) animated:NO]; }