iPhone Uygulamasında Cihazın ekran çözünürlüğü nasıl tespit edilir


130

İPhone Uygulamasında, Uygulamayı cihazda çalıştırırken Uygulamanın çalıştığı cihazın ekran çözünürlüğü nasıl tespit edilir?

Yanıtlar:


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

Bu size tüm ekranın çözünürlüğünü nokta cinsinden verecektir, bu nedenle iPhone'lar için en çok 320x480 olacaktır. İPhone4 çok daha büyük bir ekran boyutuna sahip olsa da iOS, 640x960 yerine 320x480 geri veriyor. Bunun nedeni çoğunlukla eski uygulamaların bozulmasıdır.

CGFloat screenScale = [[UIScreen mainScreen] scale];

Bu size ekranın ölçeğini verecektir. Retina Ekranı olmayan tüm cihazlar için bu bir 1.0f verirken, Retina Display cihazları 2.0f verir ve iPhone 6 Plus (Retina HD) 3.0f verir.

Şimdi, iOS cihaz ekranının piksel genişliğini ve yüksekliğini elde etmek istiyorsanız, sadece basit bir şey yapmanız gerekir.

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

Ekran ölçeğiyle çarparak gerçek piksel çözünürlüğünü elde edersiniz.

İOS'taki noktalar ve pikseller arasındaki fark hakkında iyi bir okuma buradan okunabilir .

DÜZENLEME: (Swift için Sürüm)

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

4
Bunun, iPhone 6 Plus durumunda tam olarak 'gerçek piksel' çözünürlüğü olmaması dışında. Bu çözünürlük herşey var olan bir 3x ölçeği, kodunda (OpenGL hariç) işlenip, ama sonra o aşağı örneklenmemektedir birçok iyi açıklamaların 1080 x 1920 Bir'in ekran doğal çözünürlüğü dahili olarak bağlantıya
RobP

Ne yazık ki, bu size ekrandaki öğelerin "gerçek" boyutlarını vermez, çünkü Apple'ın "noktalar" ve "ölçek" kavramları yalnızca bir yaklaşımdır. (İPhone, iPad ve iPad mini özelliklerine bakın.) Muhtemelen var olan farklı kombinasyonların sayısını azaltmak için. Bence iPhone 6 Plus çok uzakta.
ToolmakerSteve

Aslında 6+ çok uzak değil: yükseklik 736 pts / 160 (pt / in) = 4,60 "mantıksal yükseklik; gerçek ekran yüksekliği 4,79"; % 5 hata. iPad çok daha uzakta: yükseklik 1024 pts / 160 (pt / in) = 6,40 "mantıksal yükseklik; gerçek ekran yüksekliği 7,76"; % 20 hata. iPad mini tamam; orijinal iPhone yoğunluğuyla eşleşir. Çoğu amaç için, bu, iPad yazılımını iPad mini'de test etmeniz gerektiği (kullanılabilir olduğundan emin olmak için), ardından çoğu iPad'in görüntüyü% 20 büyüttüğünü (iPhone veya iPad mini ile karşılaştırıldığında) görmezden gelmeniz gerektiği anlamına gelir .
ToolmakerSteve

1
@RobP peki iPhone 6 Plus için bunu nasıl çözeceksiniz?
Crashalot

1
@Crashalot 'Bunu çöz' ile ne demek istediğinizden emin değil misiniz? Ekran çözünürlüğü elde ederken aklınızdaki amaca bağlıdır. Programcılar söz konusu olduğunda, Jman012'nin cevabı doğrudur ve 1242x2208 veya 2208x1242 boşluğa dönüşürsünüz. Heck, bu, lansman görüntülerini sağladığımız çözünürlük bile. Donanımın daha sonra bu görüntüyü aşağı örneklemesi ve daha küçük piksel sayısıyla fiziksel bir ekranda görüntülemesi, kodumuzun farkında bile olmaması gereken bir 'uygulama ayrıntısı' olacaktır.
RobP

21

UIScreen sınıfı, Ekran çözünürlüğünü Noktalar ve Piksellerde bulmanızı sağlar.

Ekran çözünürlükleri Nokta veya Piksel cinsinden ölçülür. Asla ekran boyutuyla karıştırılmamalıdır. Daha küçük bir ekran boyutu daha yüksek çözünürlüğe sahip olabilir.

UIScreen'in 'bounds.width' değeri Point cinsinden dikdörtgen boyutunu döndürür görüntü açıklamasını buraya girin

UIScreen'in 'nativeBounds.width' değeri Piksel cinsinden dikdörtgen boyutu döndürür.Bu değer PPI (Point per inch) olarak algılanır. Bir cihazdaki Görüntünün keskinliğini ve netliğini gösterir. görüntü açıklamasını buraya girin

Tüm bu değerleri algılamak için UIScreen sınıfını kullanabilirsiniz.

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

Konsol

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

Uygulama Temsilcisi'nde kullanın: Film şeridi kullanıyorum

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

İOS 8 için bunu şu şekilde kullanabiliriz [UIScreen mainScreen].nativeBounds:

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

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

4

UIScreen Referansına bakın: 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");
}

NSLog'a koyarsam yanıt için thanx (@ "% d", [[UIScreen mainScreen] ölçeği]); 0 ...... ve NSLog (@ "% @", [[UIScreen mainScreen] ölçeği]) verir; nil Pls bana ekran çözünürlüğünü nasıl alacağımı veya simülatörde çalıştırırken doğru çözünürlüğü verip vermediğini nasıl test edeceğimi bana bildirir
ios

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

0

Bu kodu kullanın, her tür cihazın ekran çözünürlüğünü elde etmeye yardımcı olacaktır.

 [[UIScreen mainScreen] bounds].size.height
 [[UIScreen mainScreen] bounds].size.width
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.