in der iPhone App So erkennen Sie die Bildschirmauflösung des Geräts


130

In der iPhone App, während die App auf dem Gerät ausgeführt wird Wie wird die Bildschirmauflösung des Geräts ermittelt, auf dem die App ausgeführt wird?

Antworten:


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

Dadurch erhalten Sie die gesamte Bildschirmauflösung in Punkten, sodass sie für iPhones normalerweise 320 x 480 beträgt. Obwohl das iPhone4 einen viel größeren Bildschirm hat, gibt iOS immer noch 320x480 statt 640x960 zurück. Dies liegt hauptsächlich daran, dass ältere Anwendungen nicht mehr funktionieren.

CGFloat screenScale = [[UIScreen mainScreen] scale];

Dadurch erhalten Sie die Größe des Bildschirms. Für alle Geräte ohne Retina-Displays wird eine 1.0f zurückgegeben, während für Retina-Display-Geräte eine 2.0f und für das iPhone 6 Plus (Retina HD) eine 3.0f angezeigt wird.

Wenn Sie nun die Pixelbreite und -höhe des Bildschirms des iOS-Geräts ermitteln möchten, müssen Sie nur eine einfache Sache tun.

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

Durch Multiplizieren mit der Bildschirmskala erhalten Sie die tatsächliche Pixelauflösung.

Eine gute Lektüre über den Unterschied zwischen Punkten und Pixeln in iOS finden Sie hier .

EDIT: (Version für 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
Abgesehen davon, dass dies beim iPhone 6 Plus nicht ganz die tatsächliche Pixelauflösung ist. Es ist die Auflösung alles ist bei ( mit Ausnahme von OpenGL) generiert in Code, mit einer 3 - fach - Skala, aber dann , Das ist Downsampling intern auf den nativen Auflösung des Bildschirms von 1080 x 1920. Einem vortrefflichen Erklärungen zu Link
RobP

Leider erhalten Sie dadurch nicht die "wahren" Dimensionen von Elementen auf dem Bildschirm, da Apples Begriffe "Punkte" und "Skalierung" nur eine Annäherung sind. (Siehe Spezifikationen für iPhone vs iPad vs iPad mini.) Vermutlich, um die Anzahl der verschiedenen Kombinationen zu reduzieren, die existieren. Ich denke, das iPhone 6 Plus ist besonders weit weg.
ToolmakerSteve

Tatsächlich 6+ nicht zu weit entfernt: Höhe 736 Punkte / 160 (Punkt / Zoll) = 4,60 "logische Höhe; tatsächliche Bildschirmhöhe beträgt 4,79"; 5% Fehler. Das iPad ist viel weiter entfernt: Höhe 1024 Punkte / 160 (Punkt / Zoll) = 6,40 "logische Höhe; tatsächliche Bildschirmhöhe beträgt 7,76"; 20% Fehler. iPad mini ist in Ordnung; es entspricht der ursprünglichen iPhone-Dichte. Für die meisten Zwecke bedeutet dies, dass man die iPad-Software auf dem iPad mini testen sollte (um sicherzustellen, dass sie verwendbar ist) und dann einfach die Tatsache ignoriert, dass die meisten iPads das Bild um 20% vergrößern (im Vergleich zu iPhone oder iPad mini).
ToolmakerSteve

1
@RobP Wie löst man das für das iPhone 6 Plus?
Crashalot

1
@Crashalot nicht sicher, was du mit "lösen" meinst? Dies hängt von dem Zweck ab, an den Sie denken, wenn Sie eine Bildschirmauflösung erhalten. Für Programmierer ist die Antwort von Jman012 korrekt und Sie rendern in einen 1242x2208- oder 2208x1242-Bereich. Das ist sogar die Auflösung, mit der wir Startbilder bereitstellen. Die Tatsache, dass die Hardware dieses Bild dann herunterfährt und es auf einem physischen Bildschirm mit einer geringeren Pixelanzahl anzeigt, wäre ein "Implementierungsdetail", das unser Code nicht einmal kennen sollte.
RobP

21

Mit der UIScreen-Klasse können Sie die Bildschirmauflösung in Punkten und Pixeln ermitteln.

Die Bildschirmauflösung wird in Punkten oder Pixeln gemessen. Es sollte niemals mit der Bildschirmgröße verwechselt werden. Eine kleinere Bildschirmgröße kann eine höhere Auflösung haben.

UIScreens 'bounds.width' gibt eine rechteckige Größe in Punkten zurück Geben Sie hier die Bildbeschreibung ein

UIScreens 'nativeBounds.width' gibt eine rechteckige Größe in Pixel zurück. Dieser Wert wird als PPI (Punkt pro Zoll) erkannt. Zeigt die Schärfe und Klarheit des Bildes auf einem Gerät an. Geben Sie hier die Bildbeschreibung ein

Sie können die UIScreen-Klasse verwenden, um alle diese Werte zu erkennen.

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

Konsole

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

Ziel c

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

Verwenden Sie es in App Delegate: Ich verwende 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

Für iOS 8 können wir dies einfach so verwenden [UIScreen mainScreen].nativeBounds:

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

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

4

Siehe die UIScreen-Referenz: 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");
}

Danke für die Antwort, wenn ich es in NSLog setze (@ "% d", [[UIScreen mainScreen] scale]); es gibt 0 ...... und NSLog (@ "% @", [[UIScreen mainScreen] Skala]); Es gibt keine Bitte lassen Sie mich wissen, wie man die Bildschirmauflösung erhält oder wie man testet, ob es die richtige Auflösung gibt, während es auf dem Simulator ausgeführt wird
ios

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

0

Verwenden Sie diesen Code, um die Bildschirmauflösung eines beliebigen Geräts zu ermitteln

 [[UIScreen mainScreen] bounds].size.height
 [[UIScreen mainScreen] bounds].size.width
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.