是的你可以。我为分组的视差效果实现了一个解决方案UITableView
。您可以使用相同的方法,除了可以使用您的图像而不是黑色背景(下面的示例)。本质上,您在 tableview 后面有两个视图(很清晰,标题视图背景清晰以及表格视图背景本身)。您基于滚动 ( UIScrollViewDelegate
) 移动这两个视图。您的表格视图背景图像将与表格以一对一的方式“滚动”,而视差图像当然将以不同的速度“滚动”。在下面的示例中,我认为我的“ _secondParaView
”将是表格的背景图像。
首先,在 viewDidLoad 中,创建一个视图以部分隐藏您的图像以获得视差效果,应该与您希望 tableview 的背景颜色相同,在我的情况下为 blackColor。我根据图像的大小将视图放置在固定偏移处,您希望此视图的顶部与“第 0 节”标题视图的末端顶部对齐。然后它会在 tableview 滚动时“滚动”。将此视图插入到 tableview 下方。
_secondParaView = [[UIView alloc] initWithFrame: CGRectMake(0.0, kTableViewOffset, self.view.frame.size.width, 200.0)];
_secondParaView.backgroundColor = [UIColor colorWithRed: 0.0 green: 0.0 blue: 0.0 alpha: 1.0];
[self.view insertSubview: _secondParaView belowSubview: _tableView];
_headerImageYOffset = -40.0;
_headerImageView = [[UIImageView alloc] initWithImage: [UIImage imageNamed: @"SpaceRedPlanet640x480.png"]];
CGRect headerImageFrame = _headerImageView.frame;
headerImageFrame.origin.y = _headerImageYOffset;
_headerImageView.frame = headerImageFrame;
[self.view insertSubview: _headerImageView belowSubview: _secondParaView];
_tableView.backgroundColor = [UIColor clearColor];
然后实现header view/header view size的两个分组tableview方法:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
if (section == 0) {
UIView * tableHeaderView = [[UIView alloc] initWithFrame: CGRectMake(0.0, 0.0, self.view.frame.size.width, kTableViewOffset)];
tableHeaderView.backgroundColor = [UIColor clearColor];
return tableHeaderView;
} else
return nil;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
if (section == 0) {
return kTableViewOffset;
} else
return 2;
}
就像在“正常”的 tableview 视差实现中一样,让你的 VC 成为 UIScrollViewDelegate 并像这样实现这个 scrollViewDidScroll:
#pragma mark -
#pragma mark UIScrollViewDelegate methods
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGFloat scrollOffset = scrollView.contentOffset.y;
CGRect headerImageFrame = _headerImageView.frame;
CGRect underParaFrame = _secondParaView.frame;
if (scrollOffset < 0) {
// Adjust top image proportionally
headerImageFrame.origin.y = _headerImageYOffset - ((scrollOffset / 3));
} else {
// We're scrolling up, return to normal behavior
headerImageFrame.origin.y = _headerImageYOffset - scrollOffset;
}
underParaFrame.origin.y = kTableViewOffset - scrollOffset;
_headerImageView.frame = headerImageFrame;
_secondParaView.frame = underParaFrame;
}
希望这会有所帮助,或者至少可以帮助某人实现分组表视图的视差效果。我找不到解决办法。