はい、できます。グループ化された の視差効果のソリューションを実装しましたUITableView
。黒い背景 (以下の例) の代わりに画像を使用できることを除いて、同じアプローチを使用できます。基本的に、テーブル ビューの背後には 2 つのビューがあります (クリア、ヘッダー ビューの背景、およびテーブル ビューの背景そのもの)。これら 2 つのビューは、スクロールに基づいて移動します ( UIScrollViewDelegate
)。テーブルビューの背景画像は、テーブルで1対1で「スクロール」しますが、視差画像はもちろん異なる速度で「スクロール」します。以下の例では、私の " _secondParaView
" がテーブルの背景画像になると思います。
まず、viewDidLoad で、視差効果のために画像を部分的に非表示にするビューを作成します。私の場合は、テーブルビューにしたい背景と同じ色にする必要があります。画像のサイズに基づいてビューを固定オフセットに配置しました。このビューの上部を「セクション 0」ヘッダー ビューの末尾の上部に合わせます。テーブルビューがスクロールするのと同じように「スクロール」します。このビューをテーブルビューの下に挿入します。
_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];
次に、ヘッダー ビュー / ヘッダー ビュー サイズの 2 つのグループ化された 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;
}
「通常の」テーブルビュー視差の実装と同様に、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;
}
これが役立つことを願っています。少なくとも、誰かがグループ化されたテーブルビューに視差効果を実装するのに役立つことを願っています. 私はそれに対する解決策を見つけることができませんでした。