2012-03-14 16 views
9

sto visualizzando un UIView con un UILabel su di esso e questo punto di vista & etichetta diventata sfocata, non appena si arriva a questi codice linee:sfocata UIView con CATransform3D solo su RETINA

CATransform3D transform = CATransform3DIdentity;  
transform.m34 = (1.0/-500); 
view.layer.transform = transform; 

Durante l'app che uso CA3Disposizioni e altre cose e questo non è mai successo prima. Inoltre, ho impostato la cornice della vista e l'etichetta solo usando numeri interi! Quindi non è un problema di mezzo pixel o qualcosa del genere, so che questo causa molti problemi sfocati, ma non i miei!

Sul simulatore non è sfocato, l'iPad non è sfocato, iPhone3GS non è sfocato. Solo su un iPhone4 con display Retina diventa sfocato. Ancor prima di fare qualsiasi rotazione 3D! Qualcuno ha la minima idea prima che impazzisca?

risposta

23

OK, ho trovato una soluzione. Dopo aver utilizzato un centinaio di diverse linee di codice utilizzando le proprietà dei livelli, come la gravità livello o di ingrandimento e tonnellate di altre soluzioni di colpo mi sono imbattuto per caso sui seguenti 2 linee:

self.layer.shouldRasterize = TRUE; 
self.layer.rasterizationScale = [[UIScreen mainScreen] scale]; 

Questa è la soluzione! Per tutti in futuro, la tua visualizzazione è sfocata sui display retina? Usa questo!

+0

Questo ha anche spiegato il comportamento strano (diverse posizioni solo nei dispositivi retina) quando ho applicato il mio CA3DTransforms! Grazie, hai salvato parecchie ore! – bartolsthoorn

+0

Brillante! Grazie mille! – JRod

+1

non funziona per me. Ancora sfocato sulla retina – zumzum

3

Avete impostato lo contentsScale per il livello corrispondente a [UIScreen mainScreen]. scale? Provalo.

+0

interessante non averlo sentito prima, proverò ora! –

+0

sfortunatamente, non ha funzionato ... –

+0

ti darà la taglia per avere il tempo di rispondere :) –

0

È possibile che le visualizzazioni siano "tra pixel" (ad esempio il centro è [12.5, 10]). Prova ad arrotondare la loro posizione e vedere se questo aiuta.

+0

Ciao Sandoze, come ho detto esplicitamente nel mio post, ho impostato i frame usando gli interi perché so che di solito è un problema "tra pixel" :) –

0

Se la posizione finale di destinazione è piatta/non trasformata, è sufficiente impostare la trasformazione su identità CATransform3D per risolvere il problema. A seconda di come sono animate le cose, l'impostazione di una posizione finale per una delle trasformazioni 3D a 0.0 può ancora introdurre errori di arrotondamento e dare un aspetto sfocato.

+0

questo è vero per la posizione finale, tuttavia, mi piacerebbe che non fosse sfocato DURANTE anche l'animazione :) –