Xamarin.Mac/Retina Displayか判別する

提供: MonoBook
移動: 案内検索

Mac OS XRetina Displayに対応するアプリケーションを作るための基礎となる。

概要[編集]

retinaでググってXamarinにしろObjective-CにしろiOSの情報ばかりでOSXの情報が少ないすぎて泣ける。 iMac 5K対応のアプリを作りたいね。

実装1[編集]

NSWindowsやNSScreenのBackingScaleFactorプロパティを調べる。

    public partial class MainWindowController : NSWindowController
    {
        // 〜〜〜省略〜〜〜
 
        public override void WindowDidLoad()
        {
            base.WindowDidLoad();
 
            this.Window.DidMove += (object sender, EventArgs e) => {
 
                // このウインドウがあるスクリーンが非Retinaならば1.0f、Retinaならば1.0fより大きな値となる。
                var scale = this.Window.BackingScaleFactor;
                Console.WriteLine(scale);
 
                // NSScreenにもBackingScaleFactorがある
                foreach (var screen in NSScreen.Screens)
                {
                    Console.WriteLine(screen.ColorSpace + ", " + screen.BackingScaleFactor);
                }
            };
 
            // Retinaと非Retinaのマルチスクリーン環境でウインドウを移動するなどして
            // BackingScaleFactorの値が変化した際にはこのイベントが発生する。
            this.Window.DidChangeBackingProperties += (object sender, EventArgs e) => {
                Console.WriteLine(this.Window.BackingScaleFactor);
            };
        }
    }

関連項目[編集]

参考文献[編集]