2017-08-06 2 views
0

私はすべてのアップルプラットフォームでユニバーサルゲームを作っています。問題はアスペクト比が多く、デバイス数が増えるにつれて面倒です。xcodeのデバイスアスペクト比をプログラムで取得

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の?』」私にエラーを与える:私は次のことを試してみました。助けてください。

答えて

0

macOSのトリックは、複数の画面がある可能性があるため、このような場合は、どちらの画面に興味があるかを判断する必要があります。 NSScreen.frameからフレームを取得し、幅を高さで除算します。

このコードは、画面のアスペクト比に与えられたウィンドウを取得しますが、上にある:

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

また、あなたはおそらくiOSの上UIScreenと似た何かをしなければならない代わりに、そこに値をハードコーディング。 Appleはいつかあなたのアプリが予期しない他のアスペクト比で新しいデバイスをリリースするかもしれません。

+0

これは私が話していることです。それぞれのOSの種類ごとにコーディングするのではなく、普遍的な方法がありますか? 'Device.screen.aspectRatio'のように? (これは擬似コードです) – Fayyouz

+0

私はそのような方法はないと思います。 –

関連する問題