为什么drawAtPoint在tablecell的contentview中创建重复图像?

时间:2010-07-22 03:34:26

标签: iphone objective-c uiimage drawrect setneedsdisplayinrect

我有一个带自定义滑块的视图。我们正在使用TableViewController的子类来生成UITableViewCell的实例。在每个tableViewCell中,我们将自定义滑块(UI视图)添加为子视图。在这里,我们有一个视图作为滑块的控制旋钮。它只是具有手势识别器的UIView的子类。控制旋钮类的drawRect方法采用UIImage并执行drawAtPoint。这很棒!总结一下,我们有:

UITableView - > UITableViewCell - > UITableViewCell.contentView - > SliderView - > SliderKnob - >的UIImage

当我们将表格单元格滚出表格视图时,会出现问题。旋钮的UIImage仍然存在。我们最终得到每次细胞出列时剩余图像的副本。我已经设置了一些NSLog语句,并确认在每个子视图中都调用了drawRect。为了刷新单元格的渲染,我需要做些什么吗?我已尝试在UITableViewCell的子视图上使用setNeedsDisplay,但未成功阻止UIImage被复制。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"SliderView";
    UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

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

    SliderView *slider = [[[SliderView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 130)] autorelease];

    // Configure the data for the cell.
    NSDictionary *dataItem = [data objectAtIndex:indexPath.row];
    slider.dimensionName = [dataItem objectForKey:@"Name"];
    slider.upperExtreme = [dataItem objectForKey:@"Upper Extreme"];
    slider.lowerExtreme = [dataItem objectForKey:@"Lower Extreme"];
    slider.score = [[dataItem objectForKey:@"Score"] intValue];

    cell.selectionStyle = UITableViewCellEditingStyleNone;
    cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"track_grainy.png"]];
    [cell.contentView addSubview:slider];

    return cell;
}

1 个答案:

答案 0 :(得分:0)