Ich möchte eine sehr dünne Haarlinie Breite einer Linie in meiner UIWiew DrawRect-Methode zeichnen. Die Zeile, die ich sehe, die einen Wert 0,5 für CGContextSetLineWidth hat, stimmt nicht mit dem gleichen Wert 1.0 Breite überein, der verwandt wird, um einen Rahmen CALayer zu zeichnen.Zeichnen einer sehr dünnen Linie mit CGContextAddLineToPoint und CGContextSetLineWidth
Sie können den Unterschied zwischen den beiden sehen - die rote Linie (Breite = 1) ist viel dünner als die lila/blaue Linie (Breite = 0,5).
Hier ist, wie ich meine Pseudo 1.0 Breite horizontale Linie an Zeichnung:
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(ctx, [UIColor blueColor].CGColor);
CGContextSetLineWidth(ctx, 0.5); // I expected a very thin line
CGContextMoveToPoint(ctx, 0, y);
CGContextAddLineToPoint(ctx, self.bounds.size.width, y);
CGContextStrokePath(ctx);
Hier ist eine Grenze für die gleiche Ansicht, diesmal unter Verwendung von 1,0 Randbreite:
UIView *myView = (UIView *)self;
CALayer *layer = myView.layer;
layer.borderColor = [UIColor redColor].CGColor;
layer.borderWidth = 1.0;
Was muss ich anders machen, um meine eigene benutzerdefinierte Linie zu zeichnen, die die gleiche Breite wie die CALayer-Version hat?
Es ist eine Art Magie! Es funktioniert, aber könnten Sie mir erklären, warum ich den Pfad um die Hälfte der Linienbreite nach unten verschieben sollte oder einen Link geben soll? – PSsam
http://stackoverflow.com/a/13674460/77567 –
Aber er hat es so klar erklärt, in 6 klaren Textzeilen ... Vermeiden Sie das Überspreizen der Pixelgrenzen beim Zeichnen dünner Linien. Das Antialiasing des Zeichenmechanismus erzeugt eine "verschmierte" Linie, die optisch dicker aussieht als erwartet, aber nicht. –