en la aplicación de iPhone Cómo detectar la resolución de pantalla del dispositivo

130

En la aplicación para iPhone, mientras ejecuta la aplicación en el dispositivo ¿Cómo detectar la resolución de pantalla del dispositivo en el que se ejecuta la aplicación?

ios
fuente

Respuestas:

349
CGRect screenBounds = [[UIScreen mainScreen] bounds];

Eso le dará la resolución de la pantalla completa en puntos, por lo que normalmente sería 320x480 para iPhones. A pesar de que el iPhone4 tiene un tamaño de pantalla mucho más grande, iOS todavía devuelve 320x480 en lugar de 640x960. Esto se debe principalmente a la ruptura de aplicaciones más antiguas.

CGFloat screenScale = [[UIScreen mainScreen] scale];

Esto le dará la escala de la pantalla. Para todos los dispositivos que no tienen pantallas Retina, esto devolverá un 1.0f, mientras que los dispositivos Retina Display darán un 2.0f y el iPhone 6 Plus (Retina HD) dará un 3.0f.

Ahora, si desea obtener el ancho y la altura de píxeles de la pantalla del dispositivo iOS, solo necesita hacer una cosa simple.

CGSize screenSize = CGSizeMake(screenBounds.size.width * screenScale, screenBounds.size.height * screenScale);

Al multiplicar por la escala de la pantalla, obtienes la resolución de píxeles real.

Aquí se puede leer una buena lectura sobre la diferencia entre puntos y píxeles en iOS .

EDITAR: (Versión para Swift)

let screenBounds = UIScreen.main.bounds
let screenScale = UIScreen.main.scale
let screenSize = CGSize(width: screenBounds.size.width * screenScale, height: screenBounds.size.height * screenScale)
James Linnell
fuente
44
Excepto que esta no es la resolución de 'píxeles reales' en el caso del iPhone 6 Plus. Es la resolución de todo lo que se rindió al (a excepción de OpenGL) en el código, con una escala de 3x, pero después de que se ha reducido muestreada internamente a la resolución nativa de la pantalla de 1080 x 1920. Una de las muchas explicaciones buenas al enlace
RobP
Lamentablemente, esto no le dará las dimensiones "verdaderas" de los elementos en la pantalla, ya que las nociones de Apple de "puntos" y "escala" son solo una aproximación. (Consulte las especificaciones en iPhone vs iPad vs iPad mini). Presumiblemente para reducir la cantidad de combinaciones diferentes que existen. Creo que el iPhone 6 Plus está particularmente lejos.
ToolmakerSteve
Realmente 6+ no muy lejos: altura 736 pts / 160 (pt / in) = 4.60 "altura lógica; la altura real de la pantalla es 4.79"; 5% de error El iPad está mucho más lejos: altura 1024 pts / 160 (pt / in) = 6.40 "altura lógica; la altura real de la pantalla es 7.76"; 20% de error iPad mini está bien; coincide con la densidad original del iPhone. Para la mayoría de los propósitos, esto significa que uno debería probar el software del iPad en el iPad mini (para asegurarse de que sea utilizable), luego simplemente ignorar el hecho de que la mayoría de los iPads amplían la imagen en un 20% (en comparación con el iPhone o iPad mini).
ToolmakerSteve
1
@RobP, ¿cómo solucionas esto para el iPhone 6 Plus?
Crashalot
1
@Crashalot no está seguro de lo que quiere decir con 'resolver esto'? Depende del propósito que tenga en mente cuando obtenga la resolución de la pantalla. En lo que respecta a los programadores, la respuesta de Jman012 es correcta y se procesa en un espacio de 1242x2208 o 2208x1242. Diablos, esa es incluso la resolución en la que proporcionamos imágenes de lanzamiento. El hecho de que el hardware muestre esta imagen y la muestre en una pantalla física con un recuento de píxeles más pequeño sería un 'detalle de implementación' que nuestro código ni siquiera debería tener en cuenta.
RobP
21

La clase UIScreen le permite encontrar la resolución de pantalla en Puntos y Píxeles.

Las resoluciones de pantalla se miden en puntos o píxeles. Nunca debe confundirse con el tamaño de la pantalla. Un tamaño de pantalla más pequeño puede tener una resolución más alta.

Los 'límites. Ancho' de UIScreen devuelven tamaño rectangular en Puntos ingrese la descripción de la imagen aquí

UIScreen 'nativeBounds.width' devuelve el tamaño rectangular en píxeles. Este valor se detecta como PPI (punto por pulgada). Muestra la nitidez y claridad de la imagen en un dispositivo. ingrese la descripción de la imagen aquí

Puede usar la clase UIScreen para detectar todos estos valores.

Swift3

// Normal Screen Bounds - Detect Screen size in Points.
let width = UIScreen.main.bounds.width
let height = UIScreen.main.bounds.height
print("\n width:\(width) \n height:\(height)")

// Native Bounds - Detect Screen size in Pixels.
let nWidth = UIScreen.main.nativeBounds.width
let nHeight = UIScreen.main.nativeBounds.height
print("\n Native Width:\(nWidth) \n Native Height:\(nHeight)")

Consola

width:736.0 
height:414.0

Native Width:1080.0 
Native Height:1920.0

Swift 2.x

//Normal Bounds - Detect Screen size in Points.
    let width  = UIScreen.mainScreen.bounds.width
    let height = UIScreen.mainScreen.bounds.height

// Native Bounds - Detect Screen size in Pixels.
    let nWidth  = UIScreen.mainScreen.nativeBounds.width
    let nHeight = UIScreen.mainScreen.nativeBounds.height

C objetivo

// Normal Bounds - Detect Screen size in Points.
CGFloat *width  = [UIScreen mainScreen].bounds.size.width;
CGFloat *height = [UIScreen mainScreen].bounds.size.height;

// Native Bounds - Detect Screen size in Pixels.
CGFloat *width  = [UIScreen mainScreen].nativeBounds.size.width
CGFloat *height = [UIScreen mainScreen].nativeBounds.size.width
Taimur Ajmal
fuente
8

Úselo en Delegado de aplicaciones: estoy usando storyboard

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {

    CGSize iOSDeviceScreenSize = [[UIScreen mainScreen] bounds].size;

    //----------------HERE WE SETUP FOR IPHONE 4/4s/iPod----------------------

    if(iOSDeviceScreenSize.height == 480){          

        UIStoryboard *iPhone35Storyboard = [UIStoryboard storyboardWithName:@"iPhone" bundle:nil];

        // Instantiate the initial view controller object from the storyboard
        UIViewController *initialViewController = [iPhone35Storyboard instantiateInitialViewController];

        // Instantiate a UIWindow object and initialize it with the screen size of the iOS device
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

        // Set the initial view controller to be the root view controller of the window object
        self.window.rootViewController  = initialViewController;

        // Set the window object to be the key window and show it
        [self.window makeKeyAndVisible];

        iphone=@"4";

        NSLog(@"iPhone 4: %f", iOSDeviceScreenSize.height);

    }

    //----------------HERE WE SETUP FOR IPHONE 5----------------------

    if(iOSDeviceScreenSize.height == 568){

        // Instantiate a new storyboard object using the storyboard file named Storyboard_iPhone4
        UIStoryboard *iPhone4Storyboard = [UIStoryboard storyboardWithName:@"iPhone5" bundle:nil];

        // Instantiate the initial view controller object from the storyboard
        UIViewController *initialViewController = [iPhone4Storyboard instantiateInitialViewController];

        // Instantiate a UIWindow object and initialize it with the screen size of the iOS device
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

        // Set the initial view controller to be the root view controller of the window object
        self.window.rootViewController  = initialViewController;

        // Set the window object to be the key window and show it
        [self.window makeKeyAndVisible];

         NSLog(@"iPhone 5: %f", iOSDeviceScreenSize.height);
        iphone=@"5";
    }

} else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    // NSLog(@"wqweqe");
    storyboard = [UIStoryboard storyboardWithName:@"iPad" bundle:nil];

}

 return YES;
 }
ios_av
fuente
5

Para iOS 8 podemos usar esto [UIScreen mainScreen].nativeBounds, así:

- (NSInteger)resolutionX
{
    return CGRectGetWidth([UIScreen mainScreen].nativeBounds);
}

- (NSInteger)resolutionY
{
    return CGRectGetHeight([UIScreen mainScreen].nativeBounds);
}
boog
fuente
4

Consulte la referencia de UIScreen: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIScreen_Class/Reference/UIScreen.html

if([[UIScreen mainScreen] respondsToSelector:NSSelectorFromString(@"scale")])
{
    if ([[UIScreen mainScreen] scale] < 1.1)
        NSLog(@"Standard Resolution Device");

    if ([[UIScreen mainScreen] scale] > 1.9)
        NSLog(@"High Resolution Device");
}
Constantin
fuente
gracias por la respuesta si lo estoy poniendo en NSLog (@ "% d", [[UIScreen mainScreen] scale]); da 0 ...... y NSLog (@ "% @", [[UIScreen mainScreen] scale]); da nula Pls me dejó saber cómo conseguir una resolución de pantalla o la forma de probar si está dando resolución correcta mientras se ejecuta en el simulador
ios
2
tryNSLog(@"%f",[[UIScreen mainScreen] scale]);
vikingosegundo
0

Use este código que ayudará a obtener cualquier tipo de resolución de pantalla del dispositivo

 [[UIScreen mainScreen] bounds].size.height
 [[UIScreen mainScreen] bounds].size.width
Shahzaib Maqbool
fuente