2014-12-17 17 views
6

Sono il nuovo in Core Graphics e cerco di disegnare cerchi. Possono essere trasparenti (solo il tratto) e riempiti con il colore del tratto. Quindi il metodo è simile al seguente:Core graphics images bassa qualità

+ (UIImage *)iconImageWithColor: (UIColor *)markColor strokeOnly:(BOOL)strokeOnly 
{ 
    CGRect rect = CGRectMake(0.0f, 0.0f, 20.0f, 20.0f); 

    UIGraphicsBeginImageContext(rect.size); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    CGPathRef clippingPath = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:7.5f].CGPath; 
    CGContextAddPath(context, clippingPath); 
    CGContextClip(context); 

    CGContextSetFillColorWithColor(context, strokeOnly == YES ? [[UIColor clearColor] CGColor] : [markColor CGColor]); 
    CGContextFillRect(context, rect); 

    CGPathRef path = CGPathCreateWithRoundedRect(rect, 10.f, 10.f, NULL); 
    [markColor setStroke]; 
    CGContextAddPath(context, path); 
    CGContextDrawPath(context, kCGPathFillStroke); 

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return image; 
} 

Il risultato è strano: sembra che la risoluzione dell'immagine sia molto bassa. È possibile rendere l'immagine del risultato bella sul display retina?

strange image

+1

Aggiungi questa riga prima di disegnare rect: CGContextSetLineWidth (context, 1.0); È possibile aggiornare 1.0 secondo le proprie esigenze. La sua larghezza della linea di trazione. – Mrunal

risposta

9

UIGraphicsBeginImageContext crea un contesto con una scala di 1, in modo da non retina. Ciò che si vuole utilizzare è

UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0.0f)

scala 0 significa che userà le dimensioni dello schermo del dispositivo

+0

Incredibile, sei la pupilla dei miei occhi <3 –

4

Usa UIGraphicsBeginImageContextWithOptions(rect.size, YES, 0.0);

ultimo parametro indica la densità di pixel risultante (scala). Quando si passa 0, viene prelevato automaticamente dalla scala dello schermo nativo del dispositivo.