gpt4 book ai didi

ios - UIScrollView subview 的视差效果

转载 作者:技术小花猫 更新时间:2023-10-29 10:45:21 27 4
gpt4 key购买 nike

我正在尝试在 UIScrollView 内的 UIView 上创建视差效果。效果似乎有效,但效果不佳。

  1. 首先我将两个 UIView subview 添加到 UIScrollView 并设置 UIScrollViews contentSize。
  2. View 汇总并创建 {320, 1000} 的 contentSize。
  3. 然后我在 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);

    }
    }

这些代码行确实产生了视差效果,但是随着滚动的继续,如果我滚动到原始起始位置, View 不会返回到它的原始位置。

我试过操纵 View 层和框架,结果都一样。

任何帮助将不胜感激。

最佳答案

您遇到的问题是您将二次滚动基于偏移量与大小的比率,而不仅仅是基于当前偏移量。因此,当您从 99 的偏移量增加到 100(比如说 100)时,您的辅助卷轴会增加 10,但是当您返回到 99 时,您的辅助卷轴只会减少 9.9,因此不再与这是你最后一次在 99 时。非线性滚动是可能的,但不是你这样做的方式。

处理此问题的一种可能更简单的方法是创建第二个 ScrollView 并将其放在实际 ScrollView 下方。使其不易处理(setUserInteractionEnabled:false)并在主滚动委托(delegate)期间修改它的 contentOffset,而不是尝试手动移动 UIImageView。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
[scrollView2 setContentOffset:CGPointMake(scrollView.contentOffset.x,scrollView.contentOffset.y * someScalingFactor) animated:NO];
}

但请确保不要为 scrollView2 设置委托(delegate),否则您可能会得到一个循环委托(delegate)方法调用,这对您来说不会有好的结果。

关于ios - UIScrollView subview 的视差效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22201729/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com