我的问题是并非所有单元格都正确初始化,并且正确的UIView是渲染图像。(参见下面的代码)在iphone 4上,它总是与带有视网膜显示屏的iphone上的同一个单元格也是另一个单元格。在此设置中,setNeedsDisplay将无法运行。 如果我在IBoutlet中使用相同的结构,它的工作原理。 ! 我需要在一些单元格中使用图像文件.png和其他一些单元格定义的绘图方法,它使用drawrect或更好我应该使用setNeedsDisplay方法.....
出了什么问题!!!
我的代码
tableview ... cell
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;
答案 0 :(得分:0)
你永远不能自己打电话给drawRect:
。它由Cocoa调用,只有Cocoa可以设置上下文。目前还不清楚你在这里要做什么。我不知道FittingImageView
是什么。你正在创造它,然后在任何情况下抛弃它。
然后尝试将单元格本身渲染为图像,并将该图像放入单元格的imageview中。这没有意义。
您可能会误解如何创建,重用和绘制tableview单元格。您应该重新阅读"Creating and Configuring a Table View."
要记住的主要事项:
dequeueReusableCellWithIdentifier:
返回某些内容)。drawRect:
。