2

何かに引っかかって、それが可能かどうかさえわかりません。UITableView の背景をカスタム イメージとして設定する方法はありますが、その背景を tableHeaderView に適用しないでください。透明なテーブル ヘッダーとテーブルビューの上部 1/3 の背後にある画像で実装された視差タイプの効果 (パス 2 アプリなど) があるため、テーブルに透明なままにする必要があるヘッダーがあります... しかし、私はテーブルの残りの部分の背後にあるカスタム イメージを取得する必要があります。

各セルの後ろを埋めるために探している背景スタイルにうまく近づくことができます。

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

ただし、これは私が探しているものとはまったく異なります。これは、画面上のテーブルビュー全体の背後に放射状のグラデーションの背景ビューが必要であり、透明なヘッダーを差し引いたものです...各セルの同じ画像だけではありません。また、このアプローチは、各セルで新しい BG イメージをロードするテーブルビューのスクロール パフォーマンスに実際に影響します。

私はあなたが使用できることを知っています:

  UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image.png"]];
  [tempImageView setFrame:self.tableView.frame];

  self.tableView.backgroundView = tempImageView;

テーブルビューの BG 画像を設定します。これは私がやろうとしていることに非常に近いですが、そのヘッダーを透明にする必要があります。これを使用する方法はありますが、それを無視して透明にするように tableHeaderView に指示しますか? みんなありがとう、ハッピーハロウィン!

4

2 に答える 2

0

はい、できます。グループ化された の視差効果のソリューションを実装しました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;
}

これが役立つことを願っています。少なくとも、誰かがグループ化されたテーブルビューに視差効果を実装するのに役立つことを願っています. 私はそれに対する解決策を見つけることができませんでした。

于 2013-01-23T03:34:57.800 に答える
0

tableHeaderView視差タイプの効果を持たせたい画像のコンテナーにすることができない理由はありますか?

を作成し、それをのUIViewとして貼り付けてから、あなたの(または何でも) をそのに追加します。のデリゲート メソッドを使用すると、ユーザーのスクロールに反応して親ビュー内で好きなように位置を変更できます。tableHeaderViewUITableViewUIImageViewtableHeaderViewUIScrollViewUIView

Path にインスパイアされた視差については、このオープン ソース プロジェクトを参照してくださいUITableView: RBParallaxTableViewController

于 2012-11-01T00:44:37.437 に答える