0

最初に言いたいのは、私はこの問題を探していましたが、私の問題に似たものは見つかりませんでした. 私がやりたいのは、各セルの背景を画像で変更することです。「上、中、下」の3枚の画像があります。この背景を配置すると、テーブルビューのスクロールが遅くなります。これは私がそれを行う方法です:

topImage = [[UIImage imageNamed:@"table_bg_top.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(10, 10, 0, 10)];
middleImage = [[UIImage imageNamed:@"table_bg_middle.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(10, 10, 0, 10)];
bottomImage = [[UIImage imageNamed:@"table_bg_bottom.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(10, 10, 10, 10)];

これら 3 つのイメージは、ビューがロードされたときに 1 回だけ初期化されます。次に、次のものがあります。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell;
        switch (indexPath.row) {
            case 1:
                cell = [tableView dequeueReusableCellWithIdentifier:@"TopCell"];
                [(UIImageView *)[cell viewWithTag:1] setImage:topImage];
                ((UILabel *)[cell viewWithTag:2]).text = @"First name";
                ((UILabel *)[cell viewWithTag:3]).text = firstName;
                break;
            case 2:
                cell = [tableView dequeueReusableCellWithIdentifier:@"MiddleCell"];
                [(UIImageView *)[cell viewWithTag:1] setImage:middleImage];
                ((UILabel *)[cell viewWithTag:2]).text = @"Last name";
                ((UILabel *)[cell viewWithTag:3]).text = lastName;
                break;
            case 3:
                cell = [tableView dequeueReusableCellWithIdentifier:@"MiddleCell"];
                [(UIImageView *)[cell viewWithTag:1] setImage:middleImage];
                ((UILabel *)[cell viewWithTag:2]).text = @"Birth";
                ((UILabel *)[cell viewWithTag:3]).text = [formatter stringFromDate:birth];
                break;
            case 4:
                cell = [tableView dequeueReusableCellWithIdentifier:@"MiddleCell"];
                [(UIImageView *)[cell viewWithTag:1] setImage:middleImage];
                ((UILabel *)[cell viewWithTag:2]).text = @"Gender";
                ((UILabel *)[cell viewWithTag:3]).text = gender;
                break;
            case 5:
                cell = [tableView dequeueReusableCellWithIdentifier:@"MiddleCell"];
                [(UIImageView *)[cell viewWithTag:1] setImage:middleImage];
                ((UILabel *)[cell viewWithTag:2]).text = @"Unit";
                ((UILabel *)[cell viewWithTag:3]).text = unit;
                break;
            case 6:
                cell = [tableView dequeueReusableCellWithIdentifier:@"MiddleCell"];
                [(UIImageView *)[cell viewWithTag:1] setImage:middleImage];
                ((UILabel *)[cell viewWithTag:2]).text = @"Height";
                if([unit isEqualToString:@"mt"])
                    ((UILabel *)[cell viewWithTag:3]).text = [NSString stringWithFormat:@"%d cm", (int)(height.floatValue*100)];
                else
                    ((UILabel *)[cell viewWithTag:3]).text = [NSString stringWithFormat:@"%d foot %d inches", (int) round((height.floatValue*100*CM_TO_INCH)) / 12, (int)round((height.floatValue*100*CM_TO_INCH)) % 12];
                break;
            case 7:
                cell = [tableView dequeueReusableCellWithIdentifier:@"BottomCell"];
                [(UIImageView *)[cell viewWithTag:1] setImage:bottomImage];
                ((UILabel *)[cell viewWithTag:2]).text = @"Weight";
                if([unit isEqualToString:@"mt"])
                    ((UILabel *)[cell viewWithTag:3]).text = [NSString stringWithFormat:@"%d kg", weight.integerValue];
                else
                    ((UILabel *)[cell viewWithTag:3]).text = [NSString stringWithFormat:@"%d pounds",(int) round((weight.floatValue*KG_TO_LBS))];
                break;
            default:
                break;
        }

    return cell;
}

3 つの異なる識別子 (上、中、下) を持つカスタム セルがあります。これによりラグが発生しています: [(UIImageView *)[cell viewWithTag:1] setImage:image];UIImageViewバックグラウンド効果を得るために、セルと同じ大きさです。

ありがとう!

4

1 に答える 1

1

問題が見つかりました。と関係があります: resizableImageWithCapInsets:UIEdgeInsetsMake(10, 10, 0, 10)、同じ画像を複数回描画して引き伸ばすため、遅れます。そのため、ラグをなくすために、この画像をセルと同じ大きさにする必要があります。

誰かが別の解決策を見つけた場合は、私に記入してください。それが機能する場合は受け入れます!

于 2012-10-31T11:18:37.603 に答える