Core Graphics nie rysuje linii o prawidłowej szerokości

Próbuję połączyć obramowanie na UIView z linią narysowaną w drawRect. Używam obu tych samych szerokości. Ale problem polega na tym, że czasem wynikowa szerokość narysowanych linii jest taka sama dla obu, a czasem nie - to nawet zmienia się wraz z orientacją urządzenia! Ale nawet bez zmiany orientacji urządzenia na ogół nie ma tej samej szerokości.

Granica jest rysowana za pomocą:

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

Powyżej tego widoku znajduje się inny widok, który jest podklasą UIView. Oba widoki mają tę samą szerokość i ten drugi widok obejmuje górną część widoku. Widok obejmujący używa następującego kodu w drawRect, aby narysować linię po lewej stronie, która powinna być idealnie dopasowana do granicy powyższego widoku poniżej:

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

Jakieś pomysły, jak można to osiągnąć? W tej chwili, nawet jeśli szerokość jest zawsze równa 1.0f, jest to zbieg okoliczności, jeśli obie linie są narysowane z taką samą widoczną szerokością.

Celem jest uzyskanie czegoś, co wygląda jak widok z zaokrąglonymi narożnikami na dole, ale zwykłe krawędzie na górze. Dlatego to robię. Pierwszy widok ma zaokrąglone narożniki, a drugi widok powyżej dopasowuje go do szerokości, ale pokrywa górną część, więc zaokrąglone narożniki na górze nie są widoczne.

Zrzut ekranu w portrecie:

Zrzut ekranu w krajobrazie:

Żółty widok znajduje się nad białym widokiem. Czarne linie białego widoku są rysowane w wyniku view.layer.borderWidth = 1.0f. Czarne linie po lewej i prawej stronie żółtego widoku są rysowane w trybie remisu z powyższym kodem. Zmiany orientacji powodują przerysowanie, ale sam kod rysunku pozostaje taki sam. Oba zrzuty ekranu pochodzą z iPhone'a z wyświetlaczem Retina (iPhone 4S).

O ile mogę powiedzieć, wszystkie wartości są „liczbami całkowitymi”:

<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