水平滚动与ios的视差背景

saz*_*azz 13 horizontal-scrolling ios parallax

我正面临着创建介绍视图的挑战,比如"Cleanio"应用程序(https://itunes.apple.com/fr/app/cleanio-pressing-la-demande/id885856031?mt=8).
这是它的样子:
在此输入图像描述 在此输入图像描述 在此输入图像描述


因此,背景和叠加层是独立移动的,而不是以相同的速度移动.
有没有人有一个起点如何实现?

Fog*_*ter 13

是的.

你需要的是两个UIScrollView.这些都应该是主视图的子视图(彼此不包含在内).

底部有一个图像,顶部有内容.

给他们打电话imageScrollViewcontentScrollView.

成为代表contentScrollView.

内容看起来像这样......

contents:    [---page 1---][---page 2---][---page 3---][---page 4---]
image:       [------------the image------------]
screen:      [---screen---]
Run Code Online (Sandbox Code Playgroud)

关键是图像小于所有页面并且大于屏幕.

滚动视图的帧与屏幕的宽度相同.此图表仅用于显示内容宽度而不是帧宽度.

因此,屏幕保持原样,两个滚动视图在其上移动.

现在是视差部分......

- (CGFloat)maxOffsetForScrollView:(UIScrollView *)scrollView
{
    CGFloat contentWidth = scrollView.contentSize.width;
    CGFloat frameWidth = CGRectGetWidth(scrollView.frame);

    return contentWidth - frameWidth;
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    // this is the delegate method for the content scroll view.
    // I'm only doing horizontal stuff here, you can do vertical too if you want

    CGFloat maximumContentOffset = [self maximumOffsetForScrollView:self.contentScrollView];
    CGFloat currentOffset = self.contentScrollView.contentOffset.x;

    CGFloat percentageOffset = currentOffset/maximumContentOffset;

    CGFloat maximumImageOffset = [self maximumContentOffsetForScrollView:self.imageScrollView];
    CGFloat actualImageOffset = maximumImageOffset * percentageOffset;

    [self.imageScrollView setContentOffset:CGPointMake(actualImageOffset, 0)];
}
Run Code Online (Sandbox Code Playgroud)

这将从内容视图中获取百分比偏移量,并将图像视图偏移相同的百分比偏移量.

结果是视差效应.您可以通过更改图像和内容的相对大小来使其更快或更慢.更多页面(或更小的图像)=更慢的视差.

  • 很好,但我仍然不知道如何在contentScrollView中管理不同的视图?以及如何将背景图像与imageScrollView相关联?我应该创建一个ImageView并将其放在imageScrollView中吗? (2认同)
  • 知道了,我必须让两个scrollView更大才能看到过渡.非常感谢,感谢您的帮助:) - (2认同)