Странная проблема с рисованием линий на iPad

У меня есть задача нарисовать разделительную линию высотой 2 пикселя между ячейками UIView. Верхняя верхняя линия в 1 пиксель должна иметь цвет #F1F1F1, а нижняя верхняя линия в 1 пиксель должна иметь цвет #DDDDDD В результате на симуляторе iPhone с дисплеем Retina эти 2 линии четко видны с разными цветами (части #F1F1F1 и #DDDDDD), на симуляторе iPad - линия искажена, и нет линий с такими цветами.

Фрагмент кода, используемый для рисования такой линии:

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);     
CGContextSetLineWidth(context, 1.);

CGContextSetStrokeColor(context, CGColorGetComponents(
          [[GlobalHelper colorFromHexRGB:@"#F1F1F1"] CGColor]) );

CGContextMoveToPoint(context, 0., line_y);
CGContextAddLineToPoint(context, rect.size.width, line_y );
CGContextStrokePath(context);
CGContextRestoreGState(context);
CGContextSaveGState(context);     
CGContextSetLineWidth(context, 1.);

CGContextSetStrokeColor(context, 
                  CGColorGetComponents([[GlobalHelper colorFromHexRGB:@"#DDDDDD"] CGColor]));

line_y += 1.;
CGContextMoveToPoint(context, 0., line_y);
CGContextAddLineToPoint(context, rect.size.width, line_y );
CGContextStrokePath(context);
CGContextRestoreGState(context);

Для объекта просмотра, который используется в качестве держателя для линии рисования (это подкласс UITableViewCell). Я попытался изменить параметры «opaque» и «clearsContextBeforeDrawing». Тот же результат - на iPhone Retina все ОК, на iPad - линия искажается.

Любые идеи о том, что вызывает это и как это исправить?


person user829640    schedule 05.07.2011    source источник


Ответы (1)


Одна идея: линия шириной 1 пиксель, нарисованная по целочисленной координате, будет размыта, потому что половина линии будет по обе стороны от границы пикселя. Попробуйте добавить 0,5 к вашей координате line_y и посмотрите, решит ли это вашу проблему.

person Daniel Dickison    schedule 05.07.2011