我怎样才能构建连续的视差滚动/表格视图?

时间:2014-03-18 17:46:54

标签: ios objective-c

我希望为iOS构建一个连续的视差滚动视图,它将充当tableView。我想要重新创建的内容与this page上显示的滚动非常相似。我已经看到很多“双视图”视差视图,但没有一个是连续的功能。

我知道这不是一个直接的问题,但我可以真正使用一些帮助设置正确的方向来做到这一点。

1 个答案:

答案 0 :(得分:1)

有很多方法可以解决这个问题。

我可能不会使用表格视图,但我想首先看一下,我会使用UIScrollView和2 UIImageViews以及NSArray张图片(取决于多少张图片)图像有。)

2个图像视图将在主view上一个放在另一个上面,然后在它们的顶部,两个图像视图都将是滚动视图,其中没有任何内容。滚动视图仅用作控件。

根据将有多少“页面”(即屏幕高度乘以图像数量)设置滚动视图的内容大小。

在滚动视图中,委托方法-(void)scrollViewDidScroll:获取滚动视图的当前偏移量。

您可以使用此偏移量来计算topImagebottomImage(即它们来自NSArray的索引)。

然后再次根据偏移更改顶部UIIMageView的位置。

粗略代码

// create a topImageView and bottomImageView.
// set contentMode UIViewContentModeScaleAspectFill
// set clipsToBounds = YES
// place them both on self.view (bottom first)
// create a scrollView with a clear background.
// place it on the self.view.
// get the array of images.
// set the scrollView.contentSize = number of images * height of scrollView.

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGFloat percentageOffset = scrollView.contentOffset.y / CGRectGetHeight(scrollView.frame);

    NSInteger topPage = floorf(percentageOffset);
    CGFloat topPageOffset = percentageOffset - topPage;

    // make sure that you're not going outside of the index bounds first!!!!

    self.topImageView.image = self.images[topPage];
    self.bottomImageView.image = self.images[topPage + 1];

    // move the top image view so it looks like you are scrolling it.
    self.topImageView.frame = CGRectOffset(self.view.bounds, -self.view.bounds.height * topPageOffset, 0);
}

这会给人一种印象,即您将顶部图像向上滑动并露出底部图像。它也会连续工作,所以如果你“轻弹”滚动视图,它会一个接一个地显示,直到滚动视图变慢并停止。

我认为这就是我接近它的方式。