2013-02-26 13 views
6

Questo è il mio codice:CALayer: linea di pixel singolo assomiglia 2 pixel

int columns 3; 
int columnWidth = self.layer.bounds.size.width/3; 

for (int c = 1; c < columns; c++) { 
    CALayer *layer = [CALayer layer]; 
    layer.frame = (CGRectMake(columnWidth * c + 0.5, 0.5, 1, self.layer.bounds.size.height)); 
    layer.backgroundColor = myColor; 
    [grid addSublayer:layer]; 
} 

ho capito che devo spostare la x ed y 0.5 pixel, che è quello che ho fatto, ma si vede ancora come una linea 2 pixel invece di 1.

enter image description here

+0

Ricordare che su un dispositivo Retina, 1 punto = 2 pixel. –

+0

@ H2CO3 - Non sono in retina, ma è bene tenere a mente. Come si distinguerebbe tra i due? C'è una costante? Pensavo che forse il cacao avrebbe fatto tutte le traduzioni automaticamente. Ma questo è un altro argomento. – Wesley

+0

Dove si disegna la linea? I Solo un rettangolo (layer.frame) con larghezza impostata su un valore strano di 1. – AlexWien

risposta

2

Impostare strato Telaio

layer.frame = (CGRectMake(columnWidth * c + 0.5, 0.5, 0.5, self.layer.bounds.size.height)); 

Si lavorerà per retina anche

Scegli questa post Sezione 1 linee Punto e limiti dei pixel .Si è ben spiegato ci

+0

Grazie anche per il collegamento! – Wesley

+0

Happy Coding :) –

+1

Non mi piace la spiegazione nel link, quindi ho creato un'illustrazione che mostra il principio. – nielsbot

19

sono andato avanti e ha fatto un quadro esplicativo, nel caso in cui è utile a chiunque

enter image description here

la linea inferiore pixel coordinate esatte e cercherà sfocate ... ogni metà della larghezza della linea si trova in una diversa riga di pixel ...

La riga superiore è sfalsata di line_width/2.0 e apparirà nitida ... si trova completamente all'interno di una fila di pixel.

+1

Grazie per questa potente spiegazione! – Wesley