¿IOS SDK proporciona una manera fácil de verificar si el dispositivo actual tiene una pantalla de alta resolución (retina)?
La mejor manera que he encontrado para hacerlo ahora es:
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) {
// RETINA DISPLAY
}
ios
iphone
retina-display
uiscreen
Pierre Valade
fuente
fuente
Respuestas:
Para detectar la pantalla Retina de manera confiable en todos los dispositivos iOS, debe verificar si el dispositivo ejecuta iOS4 + y si la
[UIScreen mainScreen].scale
propiedad es igual a 2.0. NO PUEDE asumir que un dispositivo está ejecutando iOS4 + si lascale
propiedad existe, ya que el iPad 3.2 también contiene esta propiedad.En un iPad con iOS3.2, la escala devolverá 1.0 en modo 1x y 2.0 en modo 2x, aunque sabemos que el dispositivo no contiene una pantalla Retina. Apple cambió este comportamiento en iOS4.2 para iPad: devuelve 1.0 en los modos 1x y 2x. Puede probar esto usted mismo en el simulador.
-displayLinkWithTarget:selector:
Pruebo el método en la pantalla principal que existe en iOS4.x pero no en iOS3.2, y luego verifico la escala de la pantalla:fuente
[UIDevice currentDevice].systemVersion]
. En este caso seríaNSString *currentSystemVersion = [[UIDevice currentDevice] systemVersion]; return [currentSystemVersion compare:version options:NSNumericSearch];
La respuesta de @ sickp es correcta. Solo para facilitar las cosas, agregue esta línea en su archivo Shared.pch:
Luego, en cualquier archivo, simplemente puede hacer:
fuente
fuente
?1:0
? ¿No es eso solo reiterar lo que ya se ha calculado en la parte booleana de la expresión?Aquí hay una práctica extensión rápida:
Actualización para Swift v5:
Uso:
Original:
Uso:
fuente
Este fragmento ...
Volverá ... 0 para iPhone / iPod touch de resolución estándar, 1 para iPhone de retina, 2 para iPad de resolución estándar, 3 para iPad de retina.
fuente
SSToolkit tiene un método que hace esto:
http://sstoolk.it/documentation/Categories/UIScreen(SSToolkitAdditions).html
Se utiliza de la siguiente manera:
fuente
Siempre se siente un poco dudoso comparar los valores de coma flotante para la igualdad. Prefiero ir por cualquiera
o
fuente
isRetina = [UIScreen mainScreen].scale > 1.95
. Esto también tendrá el beneficio de ser resistente cuando aparezca @ 4x :)Este es un riff en la respuesta de Matt MC anterior. Solo una categoría
UIScreen
.fuente
alreadyChecked
es gratuito, pero está bien.Versión rápida de las respuestas anteriores, con una escala> = 2.0, por lo que incluye iPhone 6+ y otros dispositivos futuros con una escala superior a Retina:
fuente
Solo para combinar la respuesta de @sickp y el siguiente comentario de @ n13, convertí esto en una categoría UIScreen que parece funcionar bien. La verificación se realiza la primera vez que la llama y luego se guarda para llamadas posteriores.
Puede ser útil para alguien.
fuente
(Util)
lugar de(RetinaCheck)
... tal vez sea menos claro, pero se presta para otros usos. También nombraría el métodoisRetinaDisplay
o algo que comienceis
, pero tal vez nunca entendí las pautas para Obj-C. Además, soy fanático,> 1.0
pero quién sabe qué tendrá sentido seguir adelante.fuente
prueba esto
fuente
Versión modificada de primulaveris para simplificar los casos de uso más comunes. Estoy en Swift 2.2 pero no debería importar.
Entonces simplemente utilízalos así
fuente
Esto funciono para mi
fuente