в додатку iPhone Як визначити роздільну здатність екрана пристрою


130

У додатку iPhone під час роботи програми на пристрої Як виявити роздільну здатність екрана пристрою, на якому працює програма?

Відповіді:


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

Це дасть вам роздільну здатність екрана в балах, тому, як правило, це буде 320x480 для iPhone. Навіть незважаючи на те, що iPhone4 має значно більший розмір екрана, iOS все ще дає 320x480 замість 640x960. Це здебільшого через злом старіших програм.

CGFloat screenScale = [[UIScreen mainScreen] scale];

Це дасть вам масштаб екрану. Для всіх пристроїв, які не мають дисплеїв Retina, це поверне 1,0f, тоді як пристрої Retina Display дадуть 2.0f, а iPhone 6 Plus (Retina HD) - 3.0f.

Тепер, якщо ви хочете отримати ширину та висоту пікселів на екрані пристрою iOS, вам потрібно зробити одну просту річ.

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

Помноживши на масштаб екрану, ви отримаєте фактичну роздільну здатність пікселя.

Гарне прочитання різниці між точками та пікселями в iOS можна прочитати тут .

EDIT: (версія для 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
За винятком того, що це не зовсім «фактична піксельна» роздільна здатність у випадку iPhone 6 Plus. Це рішення все буде винесено на (крім OpenGL) в коді, з масштабом 3x, але потім , що з пониженням проби всередині з нативним дозволом екрану 1080 х 1920. Один з багатьох хороших пояснень по посиланню
RobP

На жаль, це не дасть вам "справжніх" розмірів елементів на екрані, оскільки поняття Apple "точки" та "масштаб" є лише наближенням. (Див. Характеристики на iPhone проти iPad проти iPad mini.) Імовірно, щоб зменшити кількість різних комбінацій, які існують. Я думаю, що iPhone 6 Plus особливо далекий.
ToolmakerSteve

Насправді 6+ не надто далеко: висота 736 балів / 160 (пт / в) = 4,60 "логічна висота; фактична висота екрана - 4,79"; 5% помилка. iPad набагато далі: висота 1024 бали / 160 (pt / in) = 6,40 "логічна висота; фактична висота екрана - 7,76"; 20% помилка. iPad mini в порядку; він відповідає оригінальній щільності iPhone. Для більшості цілей це означає, що слід протестувати програмне забезпечення iPad на iPad mini (щоб переконатися, що воно є корисним), а потім просто ігнорувати той факт, що більшість iPad збільшують зображення на 20% (порівняно з iPhone або iPad mini).
ToolmakerSteve

1
@RobP так як ви вирішите це для iPhone 6 Plus?
Crashalot

1
@Crashalot не впевнений, що ти маєш на увазі під «вирішити це»? Це залежить від мети, яку ви маєте на увазі, коли ви отримаєте дозвіл екрана. Що стосується програмістів, відповідь Jman012 правильна, і ви виводите їх у простір 1242x2208 або 2208x1242. Чорт забирай, це навіть роздільна здатність, яку ми надаємо для запуску зображень. Те, що апаратне забезпечення потім відбирає це зображення і відображає його на фізичному екрані з меншим числом пікселів, було б «детальною інформацією про реалізацію», про який наш код навіть не повинен знати.
РобП

21

Клас UIScreen дозволяє знаходити роздільну здатність екрана в пунктах і пікселях.

Роздільна здатність екрана вимірюється в точках або пікселях. Його ніколи не слід плутати з розміром екрана. Менший розмір екрана може мати більш високу роздільну здатність.

'Bounds.width' UIScreen повертає прямокутний розмір у пунктах введіть тут опис зображення

'NativeBounds.width' повернення прямокутного розміру UIScreen у пікселях. Це значення визначається як PPI (точка на дюйм). Показує чіткість та чіткість зображення на пристрої. введіть тут опис зображення

Ви можете використовувати клас UIScreen для виявлення всіх цих значень.

Швидкий3

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

Консоль

width:736.0 
height:414.0

Native Width:1080.0 
Native Height:1920.0

Швидкий 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

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

Використовуйте його в додатку Делегат: Я використовую розкадровку

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

Для iOS 8 ми можемо просто використовувати це [UIScreen mainScreen].nativeBoundsтак:

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

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

4

Див. Посилання на 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");
}

дякую за відповідь, якщо я розміщую його в NSLog (@ "% d", [[UIScreen mainScreen] шкала]); він дає 0 ...... і NSLog (@ "% @", [[UIScreen mainScreen] шкала]); це дає нуль Pls, дайте мені знати, як отримати дозвіл екрана або як перевірити, чи дає він правильну роздільну здатність під час роботи на тренажері
ios

2
спробуйтеNSLog(@"%f",[[UIScreen mainScreen] scale]);
vikingosegundo

0

Використовуючи цей код, він допоможе отримати дозвіл екрана будь-якого типу пристрою

 [[UIScreen mainScreen] bounds].size.height
 [[UIScreen mainScreen] bounds].size.width
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.