iPhone: качество cornerRadius ухудшается - PullRequest
2 голосов
/ 10 июня 2010

У меня есть UILabel, который я создаю радиус для слоя, используя cornerRadius. Конечная цель - сделать ярлык похожим на Apple в почтовом приложении.

Сначала это выглядит великолепно, но как только вы несколько раз углубитесь в этот ряд и вернетесь назад, качество закругленного края начнет ухудшаться. Вы можете видеть на скриншоте, левая сторона является блочной.

Почему это происходит? Похоже, это происходит примерно после двух раз загрузки этого представления.

альтернативный текст 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 ]

8 голосов
/ 10 июня 2010

При каждом вызове cellForRowAtIndexPath вы создаете новую count UILabel. В конечном итоге в одном и том же месте будет несколько перекрывающихся видов с одной и той же сглаженной кривой, поэтому он будет выглядеть блочно.

Попробуйте создать count UILabel только при создании новой ячейки в блоке if (cell == nil). В противном случае получите метку 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]]];
2 голосов
/ 10 июня 2010

Проверьте, не настроено ли представление таблицы / ячейки для очистки контекста перед рисованием Я заметил, что у меня были похожие проблемы с текстом в ячейке.

0 голосов
/ 10 июня 2010

Я видел некоторые странные проблемы, в которых похоже, что свойства, основанные на Core Animation, являются накопительными, хотя они не должны быть. Ваша проблема здесь может быть вызвана неким накопительным переползанием от неоднократного изменения значения радиуса угла каждый раз, когда возвращается ячейка.

Я бы предложил протестировать, если радиус угла уже равен 10, прежде чем устанавливать его снова. (Хотя я ожидаю, что при прокрутке вверх и вниз это будет отображаться больше, чем при перезагрузке представления.)

Другая возможная проблема заключается в том, что некоторое подпредставление мигрирует, вызывая визуальный артефакт.

Edit:

Вместо добавления метки к самой ячейке. Попробуйте добавить его в качестве подпредставления представления содержимого ячейки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...