0

私の問題は、すべてのセルがレンダリングされた画像として正しいUIViewで正しく初期化されるわけではないことです。(以下のコードを参照)iphone 4では、網膜ディスプレイを備えたiphoneの同じセルが常に他のセルでもあります。この設定では、setNeedsDisplayは機能しません。IBoutletで同じ構造を使用すると、機能します。!一部のセルではimage-files.pngを使用する必要があり、他の一部のセルでは、drawrect以上を使用する定義済みの描画メソッドを使用する必要があります。setNeedsDisplayメソッドを使用する必要があります。

何が問題なのですか!!!

私のコード

tableview...セル

static NSString *CellIdentifier = @"TypeCell";
    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    // Configure the cell...
    CellTypes *cellType = [self.fetchedResultsController objectAtIndexPath:indexPath];
    cell.textLabel.text = cellType.title;
    cell.detailTextLabel.text = cellType.detail;

    if ( [cellType.type rangeOfString:@"TL"].location != NSNotFound) {
        cell.imageView.image = [UIImage imageNamed:[cellType.type stringByAppendingString:@"Thumb"]];
        cell.indentationWidth = 10;

    }
    else {

        static CGFloat scale = 0.0;  // old API , screen  values
        UIScreen *screen = [UIScreen mainScreen];
        if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 4.0) {
            scale = [screen scale];
        }
        if (scale>0.0) {
            UIGraphicsBeginImageContextWithOptions(cell.imageView.bounds.size, NO, scale);
        }
        else {
            UIGraphicsBeginImageContext(cell.imageView.bounds.size);
        }

        CGRect imageRect = CGRectMake(0, 0, 84, 84 );  //    cell.imageView.bounds;

        FittingImageView *fittingImage = [[FittingImageView alloc] initWithFrame:imageRect];
        fittingImage.thumb = YES;
        fittingImage.title = offSetType.title;

        [fittingImage drawRect:imageRect]; // this works but skips one imageRect
//        [fittingImage setNeedsDisplay]; //this won't work.
        [cell.layer renderInContext:UIGraphicsGetCurrentContext()];

        cell.imageView.image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

    }
    return cell;
4

1 に答える 1

0

あなたは自分自身を呼び出すことはできませんdrawRect:。これは Cocoa によって呼び出され、Cocoa のみがコンテキストをセットアップできます。ここで何をしようとしているのかは不明です。私はaが何であるかを知りませんFittingImageView。あなたはそれを作成してから、いずれにせよそれを捨てています。

次に、セル自体を画像にレンダリングして、その画像をセルのイメージビューに配置しようとします。それは意味がありません。

テーブルビュー セルがどのように作成、再利用、描画されるかを誤解しているかもしれません。「テーブル ビューの作成と構成」を読み直してください。

覚えておくべき主な事項:

  • このルーチンでは、新しいセルを作成するか、再利用可能なセルを再構成します (dequeueReusableCellWithIdentifier:何かが返される場合)。
  • このルーチンは、セルを描画するためのものではありません。それはかなり後で起こりますが、セル自体を描画するのはセルの仕事です。セルを構成しているだけです。後で描画する必要があるすべてのものを入れます。
  • 通常、このルーチンで高価なものを計算することは望ましくありません。それらを他の場所で計算してキャッシュします。このルーチンは、セルを構成し、データをセルに叩き込んでリターンする必要があります。このルーチンで新しい画像を作成しようとすると、テーブル ビューが途切れます。
  • このルーチンの途中でセルのレイヤーをいじってはいけません。複雑なものが必要な場合は、独自の .xml を持つカスタム セルを作成する必要がありますdrawRect:
于 2013-02-19T23:11:15.397 に答える