Подтвердить что ты не робот

IOS получает физический размер экрана программно?

Возможно ли это? Я хочу количество дюймов, а не количество пикселей. Я знаю, что это примерно 160 ppi. Но не совсем.

4b9b3361

Ответ 1

Если бы он был доступен, он был бы в UIScreen или UIDevice, но его там нет.

Вы можете сделать вывод из информации в Erica UIDevice-extension и спецификациях для каждого перечисленного устройства здесь, в Википедии.

Ответ 2

Нет API, который даст вам это. Лучше всего посмотреть размер экрана устройства (в точках) и от того, что можно предположить, если это iPad или iPhone и т.д., А затем использовать жестко заданные значения для размеров экрана.

Здесь приведен код для получения размера экрана:

CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
CGFloat screenHeight = screenRect.size.height;

Помните, что ширина и высота могут быть заменены в зависимости от ориентации устройства.

Ответ 3

Здесь приведен короткий метод, который оценивает размер экрана устройства. Он обновляется по последним устройствам, но может быть неудачным на будущих (так как могут быть все методы угадывания). Он также путается, если устройство зеркалируется (возвращает размер экрана устройства, а не зеркальный размер экрана)

#define SCREEN_SIZE_IPHONE_CLASSIC 3.5
#define SCREEN_SIZE_IPHONE_TALL 4.0
#define SCREEN_SIZE_IPAD_CLASSIC 9.7

+ (CGFloat)screenPhysicalSize
{
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    {
        CGSize result = [[UIScreen mainScreen] bounds].size;
        if (result.height < 500)
            return SCREEN_SIZE_IPHONE_CLASSIC;  // iPhone 4S / 4th Gen iPod Touch or earlier
        else
            return SCREEN_SIZE_IPHONE_TALL;  // iPhone 5
    }
    else
    {
        return SCREEN_SIZE_IPAD_CLASSIC; // iPad
    }
} 

Ответ 4

Возможно, вам понадобится [UIScreen mainScreen].scale;

CGFloat scale = [UIScreen mainScreen].scale;
CGRect screenRect = [[UIScreen mainScreen] bounds];

CGFloat physicalWidth = screenRect.size.width * scale;
CGFloat physicalHeight = screenRect.size.height * scale;

Ответ 5

Поскольку этот вопрос задан, Ive создала библиотеку с открытым исходным кодом для решения этой проблемы: IRLSize. Он может использоваться в любом направлении: для измерения размера представления (или всего экрана) в реальных измерениях или для установки размера представления в конкретное измерение реального мира.

Ответ 6

Возможно, код Jeff Hay может быть адаптирован для включения iPad Mini. Хитрость заключается в том, чтобы получить идентификатор модели устройства. Самым последним не-сетчатым iPad является iPad2,4, а первый iPad mini - iPad2,5. Теперь все, что вам нужно проверить, - это масштабирование экрана 1.0 (без сетчатки).

Хотя этот код не является будущим, вы всегда можете добавить больше правил для идентификаторов модели.

#import <sys/utsname.h>

#define SCREEN_SIZE_IPAD_MINI 7.9

    struct utsname systemInfo;
    uname(&systemInfo);
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && strcasecmp(systemInfo.machine, "iPad2,5") >= 0 [[UIScreen mainScreen] scale] == 1.0)
        return SCREEN_SIZE_IPAD_MINI

Ответ 7

"Формула", которую я использую,

#define IS_iPhone5 ( fabs( (double)[ [ UIScreen mainScreen ] bounds ].size.height - (double)568 ) < DBL_EPSILON )

Ответ 8

Вот быстрый способ получить размеры экрана:

var screenWidth: CGFloat {
    if UIInterfaceOrientationIsPortrait(screenOrientation) {
        return UIScreen.mainScreen().bounds.size.width
    } else {
        return UIScreen.mainScreen().bounds.size.height
    }
}
var screenHeight: CGFloat {
    if UIInterfaceOrientationIsPortrait(screenOrientation) {
        return UIScreen.mainScreen().bounds.size.height
    } else {
        return UIScreen.mainScreen().bounds.size.width
    }
}
var screenOrientation: UIInterfaceOrientation {
    return UIApplication.sharedApplication().statusBarOrientation
}

Они включены как стандартная функция в:

https://github.com/goktugyil/EZSwiftExtensions

Ответ 9

CGFloat scale = [UIScreen mainScreen].scale; CGRect screenRect = [[UIScreen mainScreen] bounds]; CGFloat screenWidth = screenRect.size.width * (scale/100.0f); CGFloat screenHeight = screenRect.size.height * (scale/100.0f);

  • масштаб сохраняется!

Ответ 10

Никто не говорил о fixedCoordinateSpace. В Swift 3 для получения размеров экрана в портретной ориентации вы должны использовать: UIScreen.main.fixedCoordinateSpace.bounds