UIScrollView / UITableView分层效果就像在Path中一样

时间:2012-10-18 05:13:36

标签: ios uitableview uiscrollview

iOS应用程序路径有这个非常酷的分层scrollView / tableView组合,我正在试图弄清楚它是如何工作的。 。

如果你还没有看到它,有一个图像位于UITableView后面,当你滚动tableview时,背景图像也会滚动,但速度不同。

不确定它们是如何实现这种效果的,但我认为可能是将两个UIScrollViews叠加在另一个上面并且弄乱了偏移/标题。

有没有人遇到这种效果,如果有的话,是否有人有任何想法如何实现?我目前遇到的问题是允许触摸同时滚动两个scrollView。

谢谢!

2 个答案:

答案 0 :(得分:2)

听起来像是一种简单的视差效果。你是一个正确的轨道(或正确的轨道,有多种方法可以做到这一点)。

实现我认为你要求的最简单的方法是在桌面视图后面滚动视图,其内容大小与图像背景相同。将您的图像放在此滚动视图中。

然后,实现scrollviewdidscroll方法并检测表视图何时滚动。使用该信息设置背景图像滚动视图的滚动偏移。 EG,无论您的桌面视图滚动百分比是多少,都会将背景滚动设置为相同的百分比。

或者,如果您不想使用第二个滚动视图,则可以使用百分比偏移量在后台向上或向下移动uiimageview。

再一次,有很多方法可以实现后台移动,我已经列出了两个简单的方法,但请记住,如果你的图像很大,你需要将它分解成一些较小的部分,或者使用uiscrollview方法和加载图块。

/脑转储。

答案 1 :(得分:0)

我使用表格视图实现了滚动效果,该表格视图的标题为{100}高度UIView,背景颜色清晰。在viewDidLoad我创建一个UIImageView,其高度与表视图的标题视图(100 px)相同,然后创建一个UIView,我们将其用作表视图的backgroundView并添加UIImageView位于它的顶部。在scrollViewDidScroll委托方法中,根据滚动视图UIImageView值缩放contentOffset.y的框架。

static CGRect headerImgFrame = {{.0, .0}, {320.0, 100.0}};

...

- (void)viewDidLoad {
    [super viewDidLoad];

    // Do any additional setup after loading the view from its nib.
    _headerImgView = [[UIImageView alloc] initWithFrame: headerImgFrame];
    _headerImgView.image = [UIImage imageNamed: @"test.png"];
    _headerImgView.contentMode = UIViewContentModeCenter;
    _headerImgView.autoresizingMask = UIViewAutoresizingNone;
    _headerImgView.layer.masksToBounds = YES;

    UIView *bgView = [[UIView alloc] init];
    bgView.backgroundColor = [UIColor whiteColor];

    tableView.backgroundView = bgView;
    [bgView release];

    [tableView.backgroundView addSubview: _headerImgView];
    [_headerImgView release];
}

- (void)scrollViewDidScroll: (UIScrollView *)scrollView {
    CGRect newFrame = CGRectMake(headerImgFrame.origin.x, headerImgFrame.origin.y,
                                 headerImgFrame.size.width, headerImgFrame.size.height - scrollView.contentOffset.y);

    _headerImgView.frame = newFrame;    
}