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