[iphone] Detectar pantalla Retina


Answers

La respuesta de @ sickp es correcta. Para facilitar las cosas, agregue esta línea en su archivo Shared.pch:

#define IS_RETINA ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] && ([UIScreen mainScreen].scale >= 2.0))

Luego, en cualquier archivo, puedes hacer lo siguiente:

if(IS_RETINA)
{
   // etc..
}
Question

¿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
    }



Esto funcionó para mí

if((UIScreen .mainScreen().scale) < 2.0)
{
    NSLog("no retina");
}
else
{
    NSLog("retina");
}



Solo para combinar la respuesta de @sickp y el siguiente comentario de @ n13, hice esto en una categoría UIScreen que parece funcionar muy bien. La verificación se realiza la primera vez que la llamas y luego se guarda para llamadas posteriores.

@interface UIScreen (RetinaCheck)
+ (BOOL)retinaScreen;
@end

static BOOL isRetinaScreen = NO;
static BOOL didRetinaCheck = NO;

@implementation UIScreen (RetinaCheck)
+ (BOOL)retinaScreen
{
    if (!didRetinaCheck) {
        isRetinaScreen = ([[self mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] &&
                          ([self mainScreen].scale == 2.0));
        didRetinaCheck = YES;
    }
    return isRetinaScreen;
}
@end

Puede ser útil para alguien.




Este fragmento ...

    int d = 0; // standard display
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2.0) {
    d = 1; // is retina display
}

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
    d += 2;
}

Volverá ... 0 para iPhone / iPod touch de resolución estándar, 1 para iPhone retina, 2 para iPad de resolución estándar, 3 para iPad retina.




Siempre se siente un poco peligroso comparar los valores de coma flotante para la igualdad. Prefiero irme por cualquiera

[UIScreen mainScreen].scale > 1.0;

o

[UIScreen mainScreen].scale < 2.0;



Este es un riff sobre la respuesta de Matt MC anterior. Solo una categoría en UIScreen .

#import "UIScreen+Util.h"

@implementation UIScreen (Util)

+ (BOOL) isRetinaDisplay {
    static BOOL retina = NO;
    static BOOL alreadyChecked = NO;
    if (!alreadyChecked) {
        UIScreen *mainScreen = self.mainScreen;
        if (mainScreen) {
            retina = mainScreen.scale > 1.0;
            alreadyChecked = YES;
        }
    }
    return retina;
}

@end



prueba esto

if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] &&
    ([UIScreen mainScreen].scale == 2.0))
{
    // Retina display
    NSLog(@"---------------Retina display");
} else {
    // non-Retina display
    NSLog(@"---------------non-Retina display");
}



Links