0

我的问题是,并非所有单元格都使用正确的 UIView 正确初始化为渲染图像。(请参见下面的代码)在 iphone 4 上,具有视网膜显示的 iphone 上的相同 cel 也是另一个单元格。在此设置中 setNeedsDisplay 将不起作用。如果我在 IBoutlet 中使用相同的结构,它就可以工作。!我需要在某些单元格中使用图像文件 .png 并在其他一些单元格中使用定义的绘图方法,它使用 drawrect 或更好我应该使用 setNeedsDisplay 方法.....

怎么回事!!!

我的代码

表格视图...单元格

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 可以设置上下文。目前尚不清楚您要在这里做什么。我不知道aFittingImageView是什么。您正在创建它,然后在任何情况下都将其丢弃。

然后,您尝试将单元格本身渲染为图像,并将该图像放入单元格的图像视图中。那没有意义。

您可能会误解 tableview 单元格是如何创建、重用和绘制的。您应该重新阅读“创建和配置表视图”。

要记住的主要事项:

  • 在这个例程中,你的工作是要么创建一个新单元,要么重新配置一个可重复使用的单元(如果dequeueReusableCellWithIdentifier:返回给你一些东西)。
  • 此例程不适用于绘制单元格。这将在很久以后发生,并且它是细胞的工作来绘制自己。您只是在配置单元格。把以后需要绘制的所有东西都放进去。
  • 您通常不想在此例程中计算昂贵的东西。在其他地方计算并缓存它们。该例程应该配置一个单元格,将数据放入其中,然后返回。如果您尝试在此例程中创建新图像,您的表格视图将会结结巴巴。
  • 您不应该在此例程中间弄乱单元格的层。如果您需要一些复杂的东西,您应该创建一个带有自己的自定义单元格drawRect:
于 2013-02-19T23:11:15.397 回答