iPhone:cornerRadius质量下降

时间:2010-06-09 20:21:19

标签: iphone uitableview uilabel

我有一个UILabel,我使用cornerRadius在图层上创建一个半径。最终目标是使标签看起来像Apple在邮件应用程序中所做的那样。

一开始它看起来很棒,但是一旦深入到该行并向后钻取几次,圆边的质量就会开始下降。你可以在屏幕截图中看到,左侧是块状的。

为什么会这样?这似乎是在加载该视图大约2次之后发生的。

alt text http://web2.puc.edu/PUC/files/iphone-number.png

这是我的细胞创建方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    }

    Trip *trip = [fetchedResultsController objectAtIndexPath:indexPath];
    cell.textLabel.text = trip.title;
    cell.detailTextLabel.text = @"Date of trip";
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    // Create a nice number, like mail uses
    UILabel *count = [[UILabel alloc] initWithFrame:CGRectMake(cell.contentView.frame.size.width - 50, 12, 34, 20)];
    [count  setText:[NSString stringWithFormat:@"%i",[[trip.rides allObjects] count]]];
    [count setFont:[UIFont fontWithName:@"Helvetica-Bold" size:16]];
    count.textAlignment = UITextAlignmentCenter;
    count.backgroundColor = [UIColor grayColor];
    count.textColor = [UIColor whiteColor];
    count.layer.cornerRadius = 10;
    [cell addSubview:count];
    [count release];

    return cell;

}

3 个答案:

答案 0 :(得分:8)

在每次调用cellForRowAtIndexPath时,您正在创建一个新的count UILabel。最终在同一个地方会有几个具有相同抗锯齿曲线的重叠视图,因此看起来很块。

尝试仅在count块中创建新单元格时创建if (cell == nil) UILabel。否则,请按标记获取count标签。

if ( cell == nil ) {
  cell = ...
  count = ...
  ...
  count.tag = 'coun';
  [cell.contentView addSubview:count];
  [count release];
} else {
  count = (UILabel *)[cell viewWithTag:'coun'];
}

[count  setText:[NSString stringWithFormat:@"%i",[[trip.rides allObjects] count]]];

答案 1 :(得分:2)

检查tableview / cell是否设置为在绘制之前清除其上下文。我注意到我在单元格上有类似的问题。

答案 2 :(得分:0)

我已经看到了一些奇怪的问题,其中看起来基于Core Animation的属性是累积的,即使它们不应该是累积的。这里的问题可能是由于每次返回单元格时反复更改角半径值的某种累积蠕变造成的。

我建议在再次设置之前测试转角半径是否已经等于10。 (虽然我希望通过向上和向下滚动来显示比重新加载视图更多。)

另一个可能的问题是某些子视图正在迁移导致视觉伪像。

编辑:

而不是将标签添加到单元格本身。尝试将其添加为单元格内容视图的子视图。