iOS应用程序路径有这个非常酷的分层scrollView / tableView组合,我正在试图弄清楚它是如何工作的。 。
如果你还没有看到它,有一个图像位于UITableView后面,当你滚动tableview时,背景图像也会滚动,但速度不同。
不确定它们是如何实现这种效果的,但我认为可能是将两个UIScrollViews叠加在另一个上面并且弄乱了偏移/标题。
有没有人遇到这种效果,如果有的话,是否有人有任何想法如何实现?我目前遇到的问题是允许触摸同时滚动两个scrollView。
谢谢!
答案 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;
}