Странная проблема с рисованием линий на iPad - PullRequest
0 голосов
/ 05 июля 2011

У меня есть задача нарисовать разделительную линию высотой 2 пикселя между ячейками UIView.Верхняя верхняя линия 1px должна иметь цвет # F1F1F1, а нижняя верхняя линия 1px должна иметь цвет #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).Я попытался изменить параметры "непрозрачный" и "clearsContextBeforeDrawing".Тот же результат - на iPhone Retina все в порядке, для iPad - линия искажена.

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

1 Ответ

3 голосов
/ 05 июля 2011

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

...