2015-12-28 15 views
5

Tôi đang cố tạo một ứng dụng vẽ đơn giản cho iPhone. Mọi thứ hoạt động tốt, cho đến khi tôi thử bố cục.Chế độ xem UIImage không có chiều cao nguyên với autolayout, đường kẻ bị mờ

Số lần xem hình ảnh của tôi phải có tỷ lệ khung hình cố định là 3: 4 do định dạng hình ảnh trên iPhone. Tôi cũng ghim nó vào hướng dẫn bố trí hàng đầu và các bên.

Các dòng Tôi vẽ đang được bóp méo, và "chảy đi"

flowing lines - screenshot

càng gần tôi nhận được đến hết đáy của cái nhìn, càng có nhiều dòng được kéo lên.

Tôi đọc ở đâu đó rằng nó có thể được gây ra bởi cái nhìn nhận một chiều cao đó không phải là một số nguyên sau khi autolayout, mà dường như đến mức khó tin:

rect measurements and autolayout constraints

Tôi không muốn hardcode rect cho mọi thiết bị iOS.

Tôi làm cách nào để "làm tròn" 0,5 này ở chiều cao?

Đây là trận hòa phương pháp đường của tôi:

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

} 

Tôi đã cố gắng để chuyển đổi của antialising, nhưng điều đó không giúp đỡ, nó chỉ làm cho nó trông khủng khiếp.

Trả lời

3

Khi tạo canvas với UIGraphicsBeginImageContext, tỷ lệ mặc định là 1. Điều này có thể khiến hình ảnh được tạo không đủ rõ ràng để hiển thị trên màn hình võng mạc.

Vì vậy, bạn cần chỉ định rõ quy mô, hoặc chỉ định quy mô mong muốn hoặc chỉ định 0 để cho phép màn hình quyết định tỷ lệ.

UIGraphicsBeginImageContextWithOptions(tempImageView.frame.size, false, 0.0) 
Các vấn đề liên quan