Xamarin.iOS の Google Maps でマーカー画像の変更と、カスタムした情報ウィンドウ (InfoWindow) の表示方法です。
Google Maps の表示方法 はこちらから。
マーカーと情報ウィンドウの表示
デフォルトのマーカーと情報ウィンドウの場合。Title・Snippet プロパティを指定すれば情報ウィンドウもタップ時に表示されます。
var marker1 = new Marker() { Title = "株式会社ディーバ", Snippet = "大阪発 C# の会社", Position = new CLLocationCoordinate2D(34.686564, 135.503155), Map = mapView };
マーカーの画像の変更
Icon プロパティを変更するだけです。InfoWindowAnchor プロパティで、情報ウィンドウの表示位置を調整できます。
var marker1 = new Marker() { Title = "株式会社ディーバ", Snippet = "大阪発 C#の会社", Position = new CLLocationCoordinate2D(34.686564, 135.503155), Icon = UIImage.FromBundle("ic_place_48pt"), InfoWindowAnchor = new CGPoint(0.5, 0), Map = mapView };
カスタムした情報ウィンドウの表示
すべて置き換え
情報ウィンドウすべてを独自に置き換える場合は、MarkerInfoWindow プロパティを使って View を返すメソッドを指定します。
mapView.MarkerInfoWindow = new GMSInfoFor((view, marker) => { var label = new UILabel(); label.Text = marker.Title; label.BackgroundColor = UIColor.Red; label.SizeToFit(); return label; });
xib ファイルに見た目を定義して、View として返すには、次のようになります(参考: Using the View .xib Template - Xamarin)。
mapView.MarkerInfoContents = new GMSInfoFor((view, marker) => { var arr = NSBundle.MainBundle.LoadNib("InfoWindowView", null, null); return Runtime.GetNSObject<UIView>(arr.ValueAt(0)); });
中身のみ置き換え
情報ウィンドウの中身のみ独自に置き換える場合は、MarkerInfoContents プロパティを使って View を返すメソッドを指定しますが、吹き出しが隠れてしまうことがあり、いい感じにできません。
mapView.MarkerInfoContents = new GMSInfoFor((view, marker) => { var v = new UIView(); v.Frame = new CGRect(0, 0, 200, 100); v.BackgroundColor = UIColor.Red; return v; });
解決方法は、不明です。View が正方形であれば(?)、正しく吹き出し内に表示されるようです。