Core Graphics não está desenhando uma linha na largura correta

Eu estou tentando combinar uma borda em um UIView com uma linha desenhada em drawRect. Eu uso para ambos a mesma largura. Mas o problema é que, às vezes, a largura resultante das linhas desenhadas é a mesma para ambos e às vezes não - isso até muda com a orientação do dispositivo! Mas, mesmo sem alterar a orientação do dispositivo, ele ainda não tem a mesma largura.

A fronteira é desenhada com:

<code>view.layer.borderColor = [UIColor blackColor].CGColor;
view.layer.borderWidth = 1.0f;
</code>

Acima dessa visão é outra visão, que é uma subclasse do UIView. Ambas as vistas têm a mesma largura e esta segunda vista cobre o topo da vista acima. A exibição de cobertura usa o código a seguir em drawRect para desenhar uma linha à esquerda, que deve alinhar perfeitamente com a borda da visualização acima abaixo dela:

<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>

Alguma idéia de como isso pode ser alcançado? No momento, mesmo que a largura seja sempre 1.0f, é apenas coincidência se ambas as linhas forem desenhadas com a mesma largura visível.

O objetivo é acabar com algo que parece uma visão com cantos arredondados na parte inferior, mas bordas usuais na parte superior. É por isso que estou fazendo isso. A primeira vista tem os cantos arredondados e a segunda vista acima combina com a largura, mas cobre a parte superior, portanto as cornes arredondadas na parte superior não são visíveis.

Captura de tela no retrato:

Captura de tela na paisagem:

A vista amarela está acima da vista branca. As linhas pretas da vista branca são desenhadas como resultado de view.layer.borderWidth = 1.0f. As linhas pretas à esquerda e à direita da vista amarela são desenhadas em drawRect com o código acima. Mudanças de orientação desencadeiam um redesenho, mas o próprio código de desenho permanece o mesmo. Ambas as capturas de tela são de um iPhone com tela de retina (iPhone 4S).

Tanto quanto eu posso dizer todos os valores são "inteiros":

<code>x: 0.000000, y: 0.000000
width: 264.000000, height: 10.000000
frame.origin.x: 33.000000, frame.origin.y: 38.000000
</code>

questionAnswers(1)

yourAnswerToTheQuestion