2014-09-16 10 views
25

Nei registri di esempio pubblicati in this question, i risultati sono identici. Qualcuno sa se c'è una differenza logica tra i due?Qual è la differenza tra -nativeScale e -scale su UIScreen in iOS8 +?

Anche Apple's description è confuso. Ecco la descrizione di scale:

Il naturale fattore di scala associata con lo schermo ... Questo valore riflette il fattore di scala necessario per convertire da predefinito logico spazio di coordinate nel dispositivo spazio di coordinate di questo schermo ...

Ecco la loro description of nativeScale:

Il na tive fattore di scala per lo schermo fisico

Qual è la differenza tra naturale e nativo?

+0

Non molto, direi. Questo è confuso. – trojanfoe

+0

Qual è la differenza tra questi due e 'contentScaleFactor' di' UIView'? – adib

risposta

18

Le proprietà nativeBounds e nativeScale sono principalmente pensate per l'uso con OpenGL e rappresentano le dimensioni effettive dei pixel e il fattore di ridimensionamento da punti a pixel che si utilizzerà per disegnare esattamente la risoluzione dello schermo, consentendo di evitare l'ulteriore costo di rendering del disegno nella dimensione virtuale di 1242 × 2208. Per esempio, con una CAEAGLLayer, devi fare questo:

theGLLayer.contentsScale = [UIScreen mainScreen].nativeScale; 

... e poi hanno solo rendere il suo contenuto alla dimensione della nativeBounds, vale a dire 1080 × 1920.

I log di esempio in questa domanda provengono dal simulatore, che come sempre non garantisce il comportamento identico a un dispositivo reale.

+0

Questo ha senso. Avresti un registro a portata di mano per confermare? Altrimenti potrei farcela un po 'più tardi. –

+0

Non uno che posso ancora condividere, mi dispiace :) –

+5

Nessun problema. Dal simulatore sembra che vengano utilizzate scale/nativeScale per indicare se l'app è resa in modo nativo alla risoluzione 6-Plus o scalata da 2x. Ad esempio, se NON includo un'immagine di avvio 2208x1242, l'app viene avviata come un'app 2x, scalata fino a 3 volte. In questo caso, "nativeScale" viene segnalato come 3x mentre la "scala" viene segnalata come 2x. –

14

Sia la scala che la scala nativa indicano quanti pixel corrisponde a un punto. Ma tieni presente che i punti sono resi a un intermediate buffer of pixels, che viene poi ridimensionato per adattarsi alla risoluzione dello schermo. Quindi, quando chiediamo, "1 pt corrisponde a quanti pixel?" potrebbe significare pixel intermedi (scala) o pixel finali (nativeScale).

Su un iPhone Plus, la scala è 3, ma nativoScale è 2.6. Questo perché il contenuto è reso a 3x (1 punto = 3 pixel) ma poi la bitmap risultante viene ridimensionata, risultando in 1 punto = 2,6 pixel.

Quindi la scala si occupa della bitmap intermedia e la scala nativa si occupa della bitmap finale.


Questo è senza zoom dello schermo. Se abiliti lo zoom di visualizzazione, la scala rimane la stessa, a 3, poiché il buffer intermedio è ancora reso a 1 punto = 3 pixel. Ma la scala nativa diventa 2.8.

Quindi, se si desidera controllare lo schermo fisico, utilizzare la scala.Ad esempio, se si dispone di un app che funziona solo su iPhone Inoltre, si potrebbe fare:

if scale != 3 { 
    print("Not supported") 
} 
Non

:

if nativeScale != 2.6 { 
    print("Not supported") 
} 

Il secondo frammento di codice non riesce a fare ciò che è stato previsto quando l'utente abilita visualizza lo zoom.