以编程方式获取xcode中的设备宽高比

时间:2017-08-06 20:23:03

标签: ios xcode macos tvos watch-os

我在所有苹果平台上制作通用游戏。问题是有很多宽高比,随着设备数量的增加,它变得很麻烦。我尝试过以下方法:

var deviceAspectRatio: CGFloat? {
#if os(iOS)
    if UIDevice.current.model.contains("iPhone") {
        return 16/9
    } else if UIDevice.current.model.contains("iPad") {
        return 4/3
    }
#elseif os(tvOS)
    return 16/9 //There might be other aspect ratios also
#elseif os(watchOS)
    return 1
#elseif os(macOS)
    //figure out aspect ratio
#else
    return nil
#endif
}

即使这样,xcode也会给我一个错误"在预期返回的函数中缺少返回' CGFloat?'"。请帮助。

2 个答案:

答案 0 :(得分:1)

为了使其成为所有设备的通用代码,您可以使用DeviceKit依赖项,然后

import DeviceKit

let device = Device.current
let deviceAspectRatio = device.screenRatio.height / device.screenRatio.width

OR

let deviceWidth = UIScreen.main.bounds.width * UIScreen.main.scale
let deviceHeight = UIScreen.main.bounds.height * UIScreen.main.scale
let testDeviceAspectRatio = deviceHeight / deviceWidth

答案 1 :(得分:0)

macOS上的技巧是可能有多个屏幕,所以如果是这种情况,你必须决定你感兴趣的是哪一个。但是,如果你选择了屏幕,您可以从NSScreen.frame获取帧,并将宽度除以高度。

此代码将获得给定窗口所在屏幕的宽高比:

guard let frame = someWindow.screen?.frame else { return nil }
let aspectRatio = NSWidth(frame) / NSHeight(frame)

另外,你可能应该在iOS上用UIScreen做类似的事情,而不是硬编码那里的值。 Apple有朝一日会发布一款新设备,其中包含您的应用程序无法预料的其他宽高比。