0

iOS デバイスの画面に UI があり、HDMI を介して 2 番目の画面に画像がある MonoTouch アプリを構築しています。UIImageView 内に画像を表示すると、画像が 2 番目の画面いっぱいになりません。以下は、外部画面に画像をセットアップして表示するためのコードです。UIScreen.Screens[1] の幅と高さにより、正しい値 1920/1080 が得られます。画像を表示すると、上下に 1 インチ、左右に 1.5 インチの境界線が表示されます。同様の外部画面設定で MPMoviePlayerController を使用すると、画面がいっぱいになります。

    public void SetImageExternal(string imageFile)
    {
        if(string.IsNullOrEmpty(imageFile) == false)
        {
            UIScreen externalScreen;
            UIWindow externalWindow;
            UIView externalView;
            UIImageView externalImageView;
            SizeF externalScreenSize;

            if(UIScreen.Screens.Length > 1)
            {

                if(externalWindow != null)
                    externalWindow.Dispose();
                externalWindow = null;

                externalScreenSize = new SizeF();
                externalScreenSize.Width = 0;
                externalScreenSize.Height = 0;
                UIScreenMode maxScreenMode = null;
                externalScreen = UIScreen.Screens[1];

                // Use the screen with the largest width
                for(int i = 0; i < externalScreen.AvailableModes.Length; i++)
                {       
                    UIScreenMode current = UIScreen.Screens[1].AvailableModes[i];
                    if(current.Size.Width > externalScreenSize.Width)
                    {
                        externalScreenSize = current.Size;
                        maxScreenMode = current;
                    }
                }

                externalScreen.CurrentMode = maxScreenMode;

                externalWindow = new UIWindow(new RectangleF(0, 0, externalScreenSize.Width, externalScreenSize.Height));
                externalWindow.RootViewController = new UIViewController(); // create dummy root view controller
                externalWindow.UserInteractionEnabled = false;

                externalImageView = new UIImageView(externalWindow.Frame);          
                externalImageView.Image = UIImage.FromBundle(imageFile);
                externalImageView.ContentMode = UIViewContentMode.ScaleToFill;

                externalView = new UIView(externalWindow.Frame);
                externalView.AddSubview(externalImageView);

                foreach(UIView view in externalWindow.Subviews)
                    view.RemoveFromSuperview();
                externalWindow.AddSubview(externalView);
                externalWindow.MakeKeyAndVisible();
                externalWindow.Hidden = false;
                externalWindow.Screen = externalScreen;
            }
        }
    }
4

1 に答える 1

0

ContentMode は、事前にレンダリングされたバージョンのコンテンツがどのようにスケーリングされるかを決定すると思います。

ただし、UIImageView は、UIImage の LeftCapWidth と TopCapHeight のパラメーターに基づいて画像のスケーリング方法を決定します。これらが設定されていない場合にのみ、ContentMode が使用されます。

于 2012-10-12T15:58:56.167 に答える