2015-12-28 5 views
5

Ich versuche, eine einfache Zeichnung App für das iPhone zu machen. Alles hat gut funktioniert, bis ich das Layout versucht habe.UIImage View keine Integer-Höhe mit Auto-Layout, gezeichnete Linie wird verschwommen

Meine Bildansicht sollte aufgrund des iPhone-Bildformats ein festes Seitenverhältnis von 3: 4 haben. Ich habe es auch an den Top Layout Guide und an die Seiten angeheftet.

Die Linien I zeichnen verzerrt werden und „wegfließen“

flowing lines - screenshot

Je näher ich an das untere Ende der Ansicht zu erhalten, wird, je mehr die Linie nach oben gezogen.

ich irgendwo gelesen, dass es durch die Ansicht Aufnahme einer Höhe verursacht werden könnten, die keine ganze Zahl ist nach dem automatischen Layout, das wahr zu sein scheint:

rect measurements and autolayout constraints

ich die hart codieren nicht wollen rect für jedes iOS-Gerät.

Wie kann ich diese 0,5 in der Höhe "wegrunden"?

Hier meine Zuglinie Methode ist:

func drawLineFrom(fromPoint: CGPoint, toPoint: CGPoint) { 

    // 1 
    UIGraphicsBeginImageContext(tempImageView.frame.size) 

    let context = UIGraphicsGetCurrentContext() 
    tempImageView.image?.drawInRect(CGRect(x: 0, y: 0, width: tempImageView.frame.size.width, height: tempImageView.frame.size.height)) 


    // 2 
    CGContextMoveToPoint(context, fromPoint.x, fromPoint.y) 
    CGContextAddLineToPoint(context, toPoint.x, toPoint.y) 

    // 3 
    CGContextSetLineCap(context, CGLineCap.Round) 
    CGContextSetLineWidth(context, brushWidth) 
    CGContextSetRGBStrokeColor(context, red, green, blue, 1.0) 
    CGContextSetBlendMode(context, CGBlendMode.Normal) 

    // 4b 
    CGContextStrokePath(context) 

    // 5 
    tempImageView.image = UIGraphicsGetImageFromCurrentImageContext() 
    tempImageView.alpha = opacity 
    UIGraphicsEndImageContext() 

} 

Ich habe bereits versucht, von Antialiasing zu wechseln, aber das half nicht, es machte es einfach schrecklich aussehen.

Antwort

3

Beim Erstellen einer Zeichenfläche mit UIGraphicsBeginImageContext ist die Standardskalierung 1. Dies kann dazu führen, dass das generierte Bild für die Anzeige auf einem Retina-Bildschirm nicht klar genug ist.

Sie müssen also offensichtlich die Skala angeben, entweder geben Sie die gewünschte Skala an, oder geben Sie 0 an, um den Bildschirm über die Skala entscheiden zu lassen.

UIGraphicsBeginImageContextWithOptions(tempImageView.frame.size, false, 0.0)