微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ios – UIScrollView子视图的视差效果

我试图在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];
}

但是请确保不为scrollView2设置委托,否则可能会得到一个循环委托方法调用,这不会为您结束.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐