2011-01-24 32 views

Odpowiedz

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

To daje rozdzielczość całego ekranu w punktach, więc to najczęściej być 320x480 dla iPhone. Mimo że iPhone4 ma znacznie większy rozmiar ekranu, iOS nadal daje 320 x 480 zamiast 640 x 960. Jest to spowodowane głównie zerwaniem starszych aplikacji.

CGFloat screenScale = [[UIScreen mainScreen] scale]; 

Daje to skalę ekranu. Dla wszystkich urządzeń, które nie mają wyświetlaczy Retina, to zwróci 1,0f, podczas gdy urządzenia Retina Display dadzą 2,0f, a iPhone 6 Plus (Retina HD) da 3,0f.

Teraz, jeśli chcesz uzyskać szerokość ekranu w pikselach o wysokości &, wystarczy wykonać jedną prostą czynność.

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

Pomnożenie przez skalę ekranu daje rzeczywistą rozdzielczość pikseli.

Dobry odczyt różnicy między punktami a pikselami w systemie iOS można przeczytać here.

EDIT: (wersja dla Swift)

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

Tyle tylko, że nie jest to "rozdzielczość rzeczywistego piksela" w przypadku iPhone'a 6 Plus. Jest to rozdzielczość wszystko * jest * renderowane na (z wyjątkiem OpenGL) w kodzie, ze skalą 3x, ale potem * to * jest próbkowane wewnętrznie do naturalnej rozdzielczości ekranu 1080 x 1920. Jedno z wielu dobrych objaśnień na [link] (http://www.paintcodeapp.com/news/iphone-6-screens-dystystified) – RobP

+0

Niestety, nie da to "prawdziwych" wymiarów elementów na ekranie, ponieważ pojęcia "punktów" i "skali" Apple "są jedynie przybliżeniem. (Zobacz specyfikacje na iPhone'a i iPada vs iPada mini.) Przypuszczalnie w celu zmniejszenia liczby różnych kombinacji, które istnieją. Myślę, że iPhone 6 Plus jest szczególnie daleko. – ToolmakerSteve

+0

Właściwie 6+ nie za daleko: wysokość 736 pkt/160 (pt/in) = 4,60 "wysokość logiczna, rzeczywista wysokość ekranu to 4,79"; 5% błąd. iPad jest znacznie dalej: wysokość 1024 pkt/160 (pt/in) = 6,40 "wysokość logiczna, rzeczywista wysokość ekranu to 7,76"; 20% błąd. iPad * mini * jest OK; dopasowuje oryginalną gęstość iPhone'a. W większości przypadków oznacza to, że należy przetestować oprogramowanie iPada na iPadzie * mini * (aby się upewnić, że jest ono użyteczne), a następnie zignorować fakt, że większość iPadów powiększa obraz o 20% (w porównaniu do iPhone'a lub iPada mini). – ToolmakerSteve

4

Zobacz UIScreen referencyjny: 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"); 
} 
+0

Dzięki za odpowiedzi, jeśli kładę go w NSLog (@ "% d", [[UIScreen mainScreen] skala]); daje 0 ...... i NSLog (@ "% @", [[UIScreen mainScreen] skala]); daje nil Pls dać mi znać, jak uzyskać rozdzielczość ekranu lub jak sprawdzić, czy daje poprawną rozdzielczość podczas uruchamiania go na symulatorze – ios

+2

wypróbuj 'NSLog (@"% f ", [[UIScreen mainScreen] skala]);' – vikingosegundo

+0

@ vikingosegundo, Dzięki – ios

8

Użyj go w App Delegata: Używam 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]; 

     [email protected]"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); 
     [email protected]"5"; 
    } 

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

} 

return YES; 
} 
+0

iPhone 6 (s) (+) nie będzie działać – vikingosegundo

4

Dla iOS 8 możemy po prostu użyć tego [UIScreen mainScreen].nativeBounds, tak:

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

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

Klasa UIScreen umożliwia znalezienie ponownego ekranu rozwiązanie w punktach i pikselach.

Rozdzielczości ekranu mierzy się w punktach lub pikselach. Nigdy nie należy go mylić z rozmiarem ekranu. Mniejszy rozmiar ekranu może mieć wyższą rozdzielczość.

UIScreen jest „bounds.width” powrócić prostokątny rozmiar w punktach enter image description here

UIScreen jest „nativeBounds.width” rozmiar powrót prostokątny wartości Pixels.This jest wykrywany jako PPI (punkt na cal). Wyświetla wyrazistość obrazu na urządzeniu. enter image description here

Możesz użyć klasy UIScreen, aby wykryć wszystkie te wartości.

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

konsoli

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 
0

użyć tego kodu to pomoże na uzyskanie dowolnego rodzaju rozdzielczości ekranu urządzenia

[[UIScreen mainScreen] bounds].size.height 
[[UIScreen mainScreen] bounds].size.width 
Powiązane problemy