2012-01-14 3 views
0

セルの背景として3つの画像を使用しようとしています。中間画像(繰り返し画像)、および下画像を含む。 dequeueReusableCellWithIdentifierを使用すると、うまく動作しますが、テーブルをスクロールするとすぐに画像がセル内に残りません。dequeueReusableCellWithIdentifierを使用すると、繰り返し背景として使用される画像がセルから漏れ出る

添付の画像を参照してください。

http://theutherfish.co.uk/iosss.png

これは面倒なコード

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellidentifier"]; 
if (cell == nil) 
{ 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"cellidentifier"]; 
} 

ですこれは正常に動作しますが、私はそれがメモリ食いであると仮定します。

UITableViewCell *cell = [[UITableViewCell alloc] initWithFrame:CGRectZero]; 

両方の世界を最大限に活用するにはどうすればよいでしょうか?すなわちそれは動作し、メモリを大量に消費することはない。

UPDATE インデックスパス機能で行の完全細胞

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellidentifier"]; 
if (cell == nil) 
{ 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"cellidentifier"]; 
} 

UIImageView *img1 = [[UIImageView alloc] initWithFrame:CGRectMake(5.0, 0.0, 310.0, 8.0)]; 
img1.image = [UIImage imageNamed:@"top.png"]; 

UIImageView *img2 = [[UIImageView alloc] initWithFrame:CGRectMake(5.0, 8.0, 310.0, [PullRefreshTableViewController heightForExpandingCell:text])]; 
img2.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"middle.png"]]; 

UIImageView *img3 = [[UIImageView alloc] initWithFrame:CGRectMake(5.0, [PullRefreshTableViewController heightForExpandingCell:text] + 8.0, 310.0, 8.0)]; 
img3.image = [UIImage imageNamed:@"tempbottom.png"]; 

[[cell contentView] addSubview:img1]; 
[[cell contentView] addSubview:img2]; 
[[cell contentView] addSubview:img3]; 

return cell; 
+0

コードの最初のサンプルは「メモリ豚」ではなく、セルを再利用する方法です。しかし、あなたはおそらくそのブロックの中で、背景画像を追加するなど、もっと多くの作業をしなければなりません。 cellForRowAtIndexPathメソッド全体を含めることができます。 – jrturton

+0

合意した、私はメモリの問題を引き起こすかもしれないと思った2番目の作品だった。機能の残りの部分を表示するコードを更新しました – JConstantine

答えて

2
私はあなたのセルの背景のような単一の伸縮画像を用いて、適切なサイズ変更と(単一ImageViewのでこれを添加助言

マスク)は、セルを作成するときだけです(つまり、cell == nilの場合)。

次に、heightForRowAtIndexPathメソッドで高さを調整します。

セルが再利用されるたびにイメージビューを追加するので、各セルに数十個のセルが表示され、それらはすべて異なる高さになるため、混乱します。

伸縮性のある画像がうまく機能しない場合は、上記のように画像ビューを1回だけ作成し、セルを再利用するときにフレームを調整するだけです。

また、画像が灰色の丸い角のように見えるので、CALayerのborderWidth、borderColor、borderRadiusプロパティを調べてください。

+0

画像はあまり良い品質ではありませんが、セルはドロップシャドウを持つことを意図しています。背景のコードの代わりに画像を使う理由は何か。私はあなたの提案を見て、あなたに戻ってきます。 – JConstantine

+0

CALayerでも影を描くことができます。それは本当にあなたのために行く方法のように聞こえる。 – jrturton

+0

テストプロジェクトでCALayerと遊んだだけで、使い方はとても簡単です。私のプロジェクトにこれを後で適用してうまくいけば、一緒にうまく行きます。ご協力ありがとうございました。 – JConstantine

関連する問題