Xamarin.iOS イメージビュー
1 表示

イメージビュー(UIImageView)を使用して、画像を表示できます。
画像は、UIImageViewのプロパティImageにUIImageオブジェクトとして設定します。
public override void ViewDidLoad() { base.ViewDidLoad(); var imageView = new UIImageView(new RectangleF(0, 0, 300, 200));//画像サイズと同じ大きさのUIImageViewとする imageView.Image = UIImage.FromFile("sample.png");//ファイルからUIImageを作成して、プロパティImageに設定する imageView.Center = new PointF(View.Bounds.Width/2,View.Bounds.Height/2);//UIImageViewを画面中に配置する Add(imageView);//ビューに追加 }
サンプルで、UIImageのFromFileで指定された"sample.png"は、Resourceの下に置かれています。
イメージビュー(UIImageView)は、コンストラクタでImageをセットすることができます。
また、セットされたImageのサイズを基に、イメージビュー自体のサイズを決定すると下記のようになります。
var imageView = new UIImageView (UIImage.FromBundle("sample.png")); imageView.Frame = new RectangleF (10,10,imageView.Image.CGImage.Width, imageView.Image.CGImage.Height);
2 サイズ

デフォルトでは、画像サイズよりもUIImageViewのサイズが優先されます。この動作を変更するためには、プロパティContenModeを設定します。
サンプルでは、UIViewContentMode.TopLeftを指定し、画像サイズを維持して左上に配置しています。
var imageView = new UIImageView(new RectangleF(0, 0, 350, 300));//画像サイズよりの大きいUIImageViewとする imageView.BackgroundColor = UIColor.Blue;//UIImageViewのサイズが分かるように青色にする imageView.Image = UIImage.FromFile("sample.png"); imageView.Center = new PointF(View.Bounds.Width / 2, View.Bounds.Height / 2);//UIImageViewを画面中に配置する imageView.ContentMode = UIViewContentMode.TopLeft; //画像サイズを維持して左上に配置
ContenModeには、下記の値が設定可能です。
- UIViewContentMode.ScaleToFill UIImageViewの大きさ(デフォルト)
- UIViewContentMode.ScaleAspectFit 画像の縦横比を維持して、UIImageViewに収まる最大サイズ
- UIViewContentMode.ScaleAspectFill 画像の縦横比を維持して、UIImageViewに空白が無い最大サイズ
- UIViewContentMode.Redraw ScaleAspectFillに加えて、サイズ変更時に再描画する
- UIViewContentMode.Center 画像サイズを維持して、中央に配置
- UIViewContentMode.Top 画像サイズを維持して、上に配置
- UIViewContentMode.TopLeft 画像サイズを維持して、左上に配置
- UIViewContentMode.TopRight 画像サイズを維持して、右上に配置
- UIViewContentMode.Bottom 画像サイズを維持して、下に配置
- UIViewContentMode.BottomLeft 画像サイズを維持して、左下に配置
- UIViewContentMode.BottomRight 画像サイズを維持して、右下に配置
- UIViewContentMode.Left 画像サイズを維持して、左に配置
- UIViewContentMode.Right 画像サイズを維持して、右に配置
3 UIImageの初期化
UIImageは、FromFile()の他に、FromBundle()が使用可能です。
FromFile()は、非同期呼出しで、通常こちらが使用されます。これに対し、FromBundle()は、同期呼出しでUIはブロックします。しかし、こちらは画像がキャッシュされるため、何回も同じ画像をロードするなら、こちらの方が適しています。
//var image = UIImage.FromFile("sample.png"); //非同期呼び出し var image = UIImage.FromBundle("sample.png");
URLから画像をロードするサンプルは下記のようになります。
var data = NSData.FromUrl(new NSUrl("http://xxxxxxxxxxxxxxxxx/sample.jpg")); var image = UIImage.LoadFromData (data);||<
画像は、「SEの雑記」でおなじみの小澤氏によるものです。
ムッシュ登場!「ノウハウは私蔵しない」―MVP for SQL Server