Программно получить размер экрана в Mac OS X

Я могу вернуть размер экрана, используя:

- (void) getScreenResolution {

    NSArray *screenArray = [NSScreen screens];
    NSScreen *mainScreen = [NSScreen mainScreen];
    unsigned screenCount = [screenArray count];
    unsigned index  = 0;

    for (index; index < screenCount; index++)
    {
      NSScreen *screen = [screenArray objectAtIndex: index];
      NSRect screenRect = [screen visibleFrame];
      NSString *mString = ((mainScreen == screen) ? @"Main" : @"not-main");

      NSLog(@"Screen #%d (%@) Frame: %@", index, mString, NSStringFromRect(screenRect));
    }
}

Вывод:

Экран №0 (основной) Кадр: {{0, 4}, {1344, 814}}

Есть ли способ отформатировать {1344, 814} в 1344x814?


Редактировать:

Это отлично работает:

- (NSString*) screenResolution {

    NSRect screenRect;
    NSArray *screenArray = [NSScreen screens];
    unsigned screenCount = [screenArray count];
    unsigned index  = 0;

    for (index; index < screenCount; index++)
    {
        NSScreen *screen = [screenArray objectAtIndex: index];
        screenRect = [screen visibleFrame];
    }

    return [NSString stringWithFormat:@"%.1fx%.1f",screenRect.size.width, screenRect.size.height];
}

person WrightsCS    schedule 13.02.2011    source источник
comment
Я предлагаю использовать быстрое перечисление вместо индексов для цикла. Это ускорит и упростит чтение. Кроме того, visibleFrame — это не то же самое, что frame; visibleFrame исключает область, занятую Dock или (когда Dock скрыт) триггерную область show-Dock, а также строку меню.   -  person Peter Hosey    schedule 13.02.2011
comment
Ваш код может быть намного проще. Прежде всего for (NSScreen *screen in [NSScreen screens]).   -  person Vladimir Prudnikov    schedule 04.04.2013
comment
Есть ли способ получить размер экрана в реальных измерениях? То есть в сантиметрах или дюймах?   -  person adib    schedule 09.12.2013
comment
Вам нужно будет скрыть пиксели во что угодно. Должно быть достаточно легко. Просто используйте описанный выше метод, чтобы получить пиксели, а затем скрыть.   -  person WrightsCS    schedule 09.12.2013


Ответы (6)


Узнать размер экрана в Mac OS очень просто:

NSRect e = [[NSScreen mainScreen] frame];
H = (int)e.size.height;
W = (int)e.size.width;
person mamady    schedule 19.05.2013
comment
Почему вы указываете ширину и высоту на ints? - person Peter Hosey; 20.07.2013
comment
@PeterHosey Вероятно, для указания высоты и ширины соответствуют ints :) - person tomsmeding; 04.08.2013
comment
@tomsmeding: Члены групп NSRect, NSPoint и NSSizeCGPoint. - person Peter Hosey; 04.08.2013

В Swift 4.0 вы можете получить размер экрана главного экрана:

if let screen = NSScreen.main {
    let rect = screen.frame
    let height = rect.size.height
    let width = rect.size.width
}

Если вы ищете размер экрана с конкретным существующим окном, вы можете получить его с помощью:

var window: NSWindow = ... //The Window laying on the desired screen
var screen = window.screen!
var rect = screen.frame
var height = rect.size.height
var width = rect.size.width
person j.s.com    schedule 09.01.2015

изменить/обновить

Свифт 4

NSScreen.main?.frame         // {x 0 y 0 w 1,920 h 1,200}
NSScreen.main?.frame.width   // 1,920.0
NSScreen.main?.frame.height  // 1,200.0 

Swift 3.x

NSScreen.main()?.frame         // {x 0 y 0 w 1,920 h 1,200}
NSScreen.main()?.frame.width   // 1,920.0
NSScreen.main()?.frame.height  // 1,200.0 

Свифт 2.x

NSScreen.mainScreen()?.frame         // {x 0 y 0 w 1,920 h 1,200}
NSScreen.mainScreen()?.frame.width   // 1,920.0
NSScreen.mainScreen()?.frame.height  // 1,200.0
person Leo Dabus    schedule 09.01.2015
comment
Проверьте разрешение экрана, вероятно, вы используете не максимальное разрешение. - person Leo Dabus; 23.06.2021
comment
измените его с «По умолчанию» на «Больше места» - person Leo Dabus; 23.06.2021

Для тех, кто ищет способ получить разрешение экрана:

Если вы программируете оконное приложение, вы можете просто получить разрешение из _window.screen.frame.size.

person Jashengmato    schedule 11.04.2013

Решение Swift 3:

NSScreen.main()!.frame

person Aron Gates    schedule 30.05.2017

person    schedule
comment
Милая, return [NSString stringWithFormat:@"%.0fx%.0f",screenRect.size.width, screenRect.size.height]; отлично вернула 1024x768, спасибо. - person WrightsCS; 13.02.2011