Core Graphics zeichnet keine Linie mit der richtigen Breite

Ich versuche, einen Rahmen in einer UIView mit einer in drawRect gezeichneten Linie zu kombinieren. Ich benutze für beide die gleiche Breite. Das Problem ist jedoch, dass manchmal die resultierende Breite der gezeichneten Linien für beide gleich ist und manchmal nicht - dies ändert sich sogar mit der Ausrichtung des Geräts! Aber auch ohne Änderung der Geräteorientierung ist die Breite im Allgemeinen immer noch nicht gleich.

Die Grenze ist gezeichnet mit:

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

Über dieser Ansicht befindet sich eine weitere Ansicht, die eine Unterklasse von UIView ist. Beide Ansichten haben die gleiche Breite und diese zweite Ansicht deckt die Oberseite der obigen Ansicht ab. In der Cover-Ansicht wird mit dem folgenden Code in drawRect links eine Linie gezeichnet, die perfekt am Rand der darüber liegenden Ansicht ausgerichtet sein soll:

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

Irgendwelche Ideen, wie dies erreicht werden kann? Im Moment ist es nur ein Zufall, dass beide Linien mit der gleichen sichtbaren Breite gezeichnet werden, obwohl die Breite immer 1.0f beträgt.

Das Ziel ist es, etwas zu erhalten, das aussieht wie eine Ansicht mit abgerundeten Ecken unten, aber üblichen Kanten oben. Deshalb mache ich das. Die erste Ansicht hat die abgerundeten Ecken und die zweite Ansicht darüber entspricht der Breite, deckt jedoch den oberen Teil ab, sodass die abgerundeten Ecken oben nicht sichtbar sind.

Screenshot im Portrait:

Screenshot im Querformat:

Die gelbe Ansicht befindet sich über der weißen Ansicht. Die schwarzen Linien der weißen Ansicht werden als Ergebnis von view.layer.borderWidth = 1.0f gezeichnet. Die schwarzen Linien links und rechts von der gelben Ansicht werden mit dem obigen Code in drawRect gezeichnet. Ausrichtungsänderungen lösen ein Neuzeichnen aus, der Zeichencode selbst bleibt jedoch gleich. Beide Screenshots stammen von einem iPhone mit Retina-Display (iPhone 4S).

Soweit ich das beurteilen kann, sind alle Werte "Ganzzahlen":

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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage