Core Graphics не рисует линию на правильной ширине
Я пытаюсь объединить границу на UIView с линией, нарисованной в drawRect. Я использую для обоих одинаковую ширину. Но проблема в том, что иногда полученная ширина нарисованных линий одинакова для обоих, а иногда нет - это даже зависит от ориентации устройства! Но даже без изменения ориентации устройства его ширина, в общем, все же не одинакова.
Граница рисуется с:
<code>view.layer.borderColor = [UIColor blackColor].CGColor; view.layer.borderWidth = 1.0f; </code>
Над этим представлением находится другое представление, которое является подклассом UIView. Оба вида имеют одинаковую ширину, и этот второй вид покрывает верхнюю часть представленного выше вида. Покрывающее представление использует следующий код в drawRect, чтобы нарисовать линию слева, которая должна идеально совпасть с границей вышеупомянутого представления ниже:
<code>CGContextRef context = UIGraphicsGetCurrentContext(); CGFloat x = self.bounds.origin.x; CGFloat y = self.bounds.origin.y; CGFloat width = self.bounds.size.width; CGFloat height = self.bounds.size.height; CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor); CGContextSetLineWidth(context, 1.0f); // Left line CGContextMoveToPoint(context, x, y); CGContextAddLineToPoint(context, x, height); CGContextStrokePath(context); // Right line CGContextMoveToPoint(context, width - 1.0f, y); CGContextAddLineToPoint(context, width - 1.0f, height); CGContextStrokePath(context); </code>
Есть идеи, как этого достичь? Прямо сейчас, даже если ширина всегда равна 1,0f, это просто совпадение, если обе линии нарисованы с одинаковой видимой шириной.
Цель состоит в том, чтобы получить нечто, похожее на вид с закругленными углами внизу, но обычными краями сверху. Вот почему я это делаю. Первый вид имеет закругленные углы, а второй вид сверху соответствует ширине, но покрывает верхнюю часть, поэтому закругленные углы сверху не видны.
Скриншот в портрете:
Скриншот в пейзаже:
Желтый вид выше белого. Черные линии белого вида отображаются в результате view.layer.borderWidth = 1.0f. Черные линии слева и справа от желтого вида рисуются в drawRect с кодом выше. Изменения ориентации вызывают перерисовку, но сам код чертежа остается прежним. Оба снимка экрана сделаны с iPhone с дисплеем Retina (iPhone 4S).
Насколько я могу судить, все значения являются "целыми числами":
<code>x: 0.000000, y: 0.000000 width: 264.000000, height: 10.000000 frame.origin.x: 33.000000, frame.origin.y: 38.000000 </code>