是的,可以。我爲分組的UITableView
實施了視差效果解決方案。你可以使用相同的方法,除了黑色背景(下面的例子),你可以使用你的圖像。本質上,你有兩個視圖背後的tableview(這是清晰的,標題視圖背景清晰以及表視圖背景本身)。這兩個視圖基於滾動而移動(UIScrollViewDelegate
)。你的桌面視圖背景圖像,你會「滾動」1表1,而你的視差圖像將「滾動」在不同的速度當然。在下面的例子中,我認爲我的「_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];
然後實現頁眉視圖/頭視圖大小兩個分組實現代碼如下方法:
- (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;
}
希望這有助於,或者至少是可以幫助別人實現了分組的tableview的視差效果。我找不到解決辦法。
忘記它,默認的UITableViewController是有史以來最糟糕的事情,它不會做你想做的事情。創建一個普通的UIViewController,把你的東西放在你想要的地方,並且自己實現協議,這是唯一的方法。 – whiteagle