2015-12-28 16 views
5

Sto provando a realizzare un'app di disegno semplice per l'iPhone. Tutto ha funzionato bene, fino a quando ho provato il layout.La vista di UIImage non ha altezza intera con autolayout, la linea disegnata diventa sfocata

La mia vista immagine dovrebbe avere una proporzione fissa di 3: 4, a causa del formato di immagine iPhone. L'ho anche attaccato alla guida di layout superiore e ai lati.

Le linee che disegno vengono distorti, e "scorrono via"

flowing lines - screenshot

Più mi avvicino alla fine inferiore della vista, tanto più la linea viene tirato verso l'alto.

ho letto da qualche parte che potrebbe essere causato dalla vista che riceve un'altezza che non è un numero intero dopo il layout automatico, che sembra essere vero:

rect measurements and autolayout constraints

Non voglio hardcoded il retto per ogni dispositivo iOS.

Come posso "arrotondare" questo 0.5 nell'altezza?

Ecco il mio metodo draw line:

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

} 

Ho già provato a cambiare di antialiasing, ma che non ha aiutato, ha appena fatto sembrare orribile.

risposta

3

Quando si crea una tela con UIGraphicsBeginImageContext, la scala di default è 1. Ciò potrebbe causare un'immagine non sufficientemente chiara da essere visualizzata su una retina.

Quindi è necessario specificare la scala ovviamente, specificare la scala desiderata o specificare 0, in modo che lo schermo decida la scala.

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