nell'app iPhone Come rilevare la risoluzione dello schermo del dispositivo


130

Nell'app per iPhone, durante l'esecuzione dell'app sul dispositivo Come rilevare la risoluzione dello schermo del dispositivo su cui è in esecuzione l'app?

Risposte:


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

Questo ti darà la risoluzione dell'intero schermo in punti, quindi sarebbe in genere 320x480 per iPhone. Anche se l'iPhone4 ha una dimensione dello schermo molto più grande, iOS restituisce comunque 320x480 invece di 640x960. Ciò è dovuto principalmente alla rottura delle applicazioni precedenti.

CGFloat screenScale = [[UIScreen mainScreen] scale];

Questo ti darà la scala dello schermo. Per tutti i dispositivi che non hanno Retina Display questo restituirà un 1.0f, mentre i dispositivi Retina Display daranno un 2.0f e l'iPhone 6 Plus (Retina HD) darà un 3.0f.

Ora, se vuoi ottenere la larghezza e l'altezza dei pixel dello schermo del dispositivo iOS, devi solo fare una cosa semplice.

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

Moltiplicando per la scala dello schermo si ottiene la risoluzione effettiva dei pixel.

Una buona lettura della differenza tra punti e pixel in iOS può essere letta qui .

EDIT: (versione per Swift)

let screenBounds = UIScreen.main.bounds
let screenScale = UIScreen.main.scale
let screenSize = CGSize(width: screenBounds.size.width * screenScale, height: screenBounds.size.height * screenScale)

4
Tranne che questa non è proprio la risoluzione del "pixel reale" nel caso di iPhone 6 Plus. È la risoluzione in cui tutto viene reso (tranne OpenGL) in codice, con una scala 3x, ma che viene poi
sottoposto a

Purtroppo, questo non ti darà le "vere" dimensioni degli elementi sullo schermo, poiché le nozioni di Apple di "punti" e "scala" sono solo un'approssimazione. (Vedi le specifiche su iPhone vs iPad vs iPad mini.) Presumibilmente per ridurre il numero di diverse combinazioni esistenti. Penso che iPhone 6 Plus sia particolarmente lontano.
ToolmakerSteve

In realtà 6+ non troppo lontano: altezza 736 pts / 160 (pt / in) = 4.60 "altezza logica; l'altezza effettiva dello schermo è 4.79"; Errore del 5%. iPad è molto più lontano: altezza 1024 pts / 160 (pt / in) = 6,40 "altezza logica; l'altezza effettiva dello schermo è 7,76"; Errore del 20%. iPad mini è OK; corrisponde alla densità originale dell'iPhone. Per la maggior parte degli scopi, ciò significa che si dovrebbe testare il software iPad su iPad mini (per assicurarsi che sia utilizzabile), quindi semplicemente ignorare il fatto che la maggior parte degli iPad ingrandisce l'immagine del 20% (rispetto a iPhone o iPad mini).
ToolmakerSteve

1
@RobP, quindi come risolvi questo problema con l'iPhone 6 Plus?
Crashalot,

1
@Crashalot non sei sicuro di cosa intendi per 'risolvere questo'? Dipende dallo scopo che hai in mente quando ottieni la risoluzione dello schermo. Per quanto riguarda i programmatori, la risposta di Jman012 è corretta e si esegue il rendering in uno spazio 1242x2208 o 2208x1242. Diamine, questa è anche la risoluzione a cui forniamo le immagini di lancio. Il fatto che l'hardware quindi esegua il campionamento di questa immagine e la visualizzi su uno schermo fisico con un numero di pixel inferiore sarebbe un "dettaglio di implementazione" di cui il nostro codice non dovrebbe nemmeno essere a conoscenza.
RobP,

21

La classe UIScreen ti consente di trovare la risoluzione dello schermo in Punti e Pixel.

Le risoluzioni dello schermo sono misurate in punti o pixel. Non dovrebbe mai essere confuso con le dimensioni dello schermo. Una dimensione dello schermo più piccola può avere una risoluzione più elevata.

La 'bounds.width' di UIScreen restituisce una dimensione rettangolare in Punti inserisci qui la descrizione dell'immagine

'NativeBounds.width' di UIScreen restituisce dimensioni rettangolari in pixel. Questo valore viene rilevato come PPI (punto per pollice). Mostra la nitidezza e la chiarezza dell'immagine su un dispositivo. inserisci qui la descrizione dell'immagine

È possibile utilizzare la classe UIScreen per rilevare tutti questi valori.

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)")

consolle

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

ObjectiveC

// 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

8

Usalo nel delegato app: sto usando lo 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;
 }

5

Per iOS 8 possiamo semplicemente usare questo [UIScreen mainScreen].nativeBounds, in questo modo:

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

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

4

Vedi il riferimento 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");
}

grazie per la risposta se lo sto inserendo in NSLog (@ "% d", [scala [UIScreen mainScreen]]); fornisce 0 ...... e NSLog (@ "% @", [scala [UIScreen mainScreen]]); mi dà niente Pls fammi sapere come ottenere la risoluzione dello schermo o come testare se sta dando la risoluzione corretta durante l'esecuzione sul simulatore
iOS

2
provareNSLog(@"%f",[[UIScreen mainScreen] scale]);
vikingosegundo il

0

Usa questo codice ti aiuterà a ottenere qualsiasi tipo di risoluzione dello schermo del dispositivo

 [[UIScreen mainScreen] bounds].size.height
 [[UIScreen mainScreen] bounds].size.width
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.