Почему мой круг, нарисованный CGContext, отстой?

У меня есть пользовательская ячейка представления таблицы, которая предназначена для рисования круга, как это делает Mail.app в iPhone:

Круги, которые не отстой

Вместо этого он рисует так:

Отстойные круги

Вот мой код:

CGContextRef context = UIGraphicsGetCurrentContext();
UIColor *grayColor = [UIColor grayColor];

[grayColor set];

CGContextStrokeEllipseInRect(context, CGRectMake(9, 10, 23, 23));

Как мне сделать так, чтобы это не было отстойно? :)

Изменить: не обращайте внимания на тот факт, что я пропустил код, который рисует белый цвет фона.

Что насчет отстойности? Это не похоже, если не совсем похоже на круг из Mail.


person Abraham Vegh    schedule 30.11.2010    source источник
comment
Что в этом хренового? Сглаживание/рендеринг? Ширина/цвет? Некоторые детали помогут вам получить лучший ответ.   -  person Josh Bleecher Snyder    schedule 30.11.2010
comment
Отредактировано, чтобы указать, почему это отстой, хотя я думал, что это будет очевидно из изображений.   -  person Abraham Vegh    schedule 30.11.2010
comment
Твои изображения раньше не загружались, абрахамвег. Но они есть сейчас.   -  person Steven Fisher    schedule 30.11.2010


Ответы (2)


Я смог решить эту проблему, изменив UIColor на тот же цвет, который использует Apple, #E5E5E5:

[UIColor colorWithRed: 0.8980392157 green: 0.8980392157 blue: 0.8980392157 alpha: 1.0]

И изменение ширины линии с 1.0 по умолчанию на 2.0:

CGContextSetLineWidth(context, 2.0);

Также необходимо было изменить размер:

CGContextStrokeEllipseInRect(context, CGRectMake(10, 11, 21, 21));

Окончательный код выглядит так:

CGContextRef context = UIGraphicsGetCurrentContext();
UIColor *grayColor = [UIColor colorWithRed: 0.8980392157 green: 0.8980392157 blue: 0.8980392157 alpha: 1.0];

[grayColor set];

CGContextSetLineWidth(context, 2.0);
CGContextStrokeEllipseInRect(context, CGRectMake(10, 11, 21, 21));

И выводит так:

Круг, который не отстой

person Abraham Vegh    schedule 30.11.2010
comment
Ваш ответ напомнил мне и вдохновил меня на эксперименты с шестнадцатеричными литералами с плавающей запятой C. Вы можете представить значения компонентов цвета как, например, 0xE5p+0 / 0xFFp+0. - person Peter Hosey; 16.02.2013

Попробуйте установить его альфу на 0,5 и сделать границы толще, например, вот так:

CGContextSetAlpha(context, 0.5);
person Knodel    schedule 30.11.2010
comment
и немного меньше, чтобы точно соответствовать другому кругу. - person Randy; 30.11.2010
comment
Установка альфы на 0.5 действительно улучшает ситуацию с цветом, но я, вероятно, сделаю это лучше, получив фактическое представление UIColor этого конкретного оттенка серого, чтобы уменьшить вычислительные усилия. Какой вызов компьютерной графики я использую, чтобы сделать границу толще? - person Abraham Vegh; 30.11.2010
comment
использовать CGContextSetLineWidth(CGContextRef c, ширина CGFloat); - person Matthias Bauch; 30.11.2010