0

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

如果您还没有看到它,那么在 UITableView 后面有一个图像,这样当您滚动 tableview 时,背景图像也会滚动,但速度不同。

不知道他们是如何实现这种效果的,但我认为这可能是通过将两个 UIScrollView 层叠在另一个之上并弄乱偏移量/标题。

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

谢谢!

4

2 回答 2

2

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

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

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

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

再一次,有很多方法可以实现背景移动,我列出了两种简单的方法,但请记住,如果你的图像很大,你需要将它分成一些更小的部分,或者使用 uiscrollview 方法和加载瓷砖。

/大脑转储。

于 2012-10-18T05:29:37.280 回答
0

我已经使用表格视图实现了滚动效果,该表格视图的标题 aUIView为 100 px 高度,背景颜色清晰。在viewDidLoad我创建一个UIImageView与表格视图的标题视图(100 px)高度相同的情况下,然后创建一个 UIView,我们将用作表格视图的 backgroundView 并在其顶部添加 UIImageView。在委托方法中,根据滚动视图值scrollViewDidScroll缩放框架。UIImageViewcontentOffset.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;    
}
于 2013-05-14T12:06:55.083 回答