Xamarin.MacでRetina Displayか判別する

提供: MonoBook
2017年12月21日 (木) 07:22時点におけるimported>Administratorによる版 (Administrator がページ「Xamarin.Mac/Retina Displayか判別する」を「Xamarin.MacでRetina Displayか判別する」に移動しました)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

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);
            };
        }
    }

関連項目[編集 | ソースを編集]

参考文献[編集 | ソースを編集]