【问题标题】:Programmatically get screen size in Mac OS X在 Mac OS X 中以编程方式获取屏幕大小
【发布时间】:2011-02-13 05:40:41
【问题描述】:

我可以使用以下方法返回屏幕尺寸:

- (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];
}

【问题讨论】:

  • 我建议对循环使用快速枚举而不是索引。它将使它更快,更容易阅读。另外,visibleFrameframe 不一样; visibleFrame 不包括 Dock 占用的区域或(当 Dock 隐藏时)show-Dock 触发区域以及菜单栏。
  • 您的代码可能要简单得多。首先for (NSScreen *screen in [NSScreen screens]).
  • 有没有办法在实际测量中获得屏幕尺寸?也就是说,以厘米还是英寸为单位?
  • 您需要将像素转换为您想要的任何内容。应该很容易。只需使用上面的方法获取像素,然后进行隐蔽。

标签: cocoa macos screen resolution


【解决方案1】:

在 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

【讨论】:

    【解决方案2】:

    在 Mac OS 中查找屏幕尺寸非常简单:

    NSRect e = [[NSScreen mainScreen] frame];
    H = (int)e.size.height;
    W = (int)e.size.width;
    

    【讨论】:

    • 为什么要将宽度和高度投射到ints?
    • @PeterHosey 大概表示高度和宽度 ints :)
    • @tomsmeding:NSRectNSPointNSSize 的成员是 CGPoints。
    【解决方案3】:

    NSLog(@"%fx%f",screenRect.size.width, screenRect.size.height);

    【讨论】:

    • 甜蜜,return [NSString stringWithFormat:@"%.0fx%.0f",screenRect.size.width, screenRect.size.height]; 完美返回 1024x768,谢谢。
    【解决方案4】:

    编辑/更新

    斯威夫特 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 
    

    Swift 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
    

    【讨论】:

    • 检查你的屏幕分辨率你可能没有使用最大分辨率
    • 将其从“默认”更改为“更多空间”
    【解决方案5】:

    对于那些正在寻找一种方法来获得屏幕分辨率的人:

    如果您正在编写基于窗口的应用程序,您可以简单地从 _window.screen.frame.size 获取分辨率

    【讨论】:

      【解决方案6】:

      Swift 3 解决方案:

      NSScreen.main()!.frame

      【讨论】:

        猜你喜欢
        • 2011-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多