その11: SDK Demos (Google Maps SDK for iOS)
ではSDKDemosのソースを眺めていきます。
ストリートビュー関連を除いて、 1.2.1や1.3.0の記事からそれほど大きくは変わっていないようです。
デモアプリのbuild
DemoプロジェクトのBundleIDを適宜変更して、 APIKey.hにAPI Consoleで作成したAPI Keyを設定してやればbuildが可能です。 Targetを5.1にすれば5.1でも動きます。
構造
全体の構造は、デモ一覧のTableViewとデモ画面の Master-Detail。
SDKDemosAppDelegate.mの didFinishLaunchingWithOptions:の中でAPI Keyの設定の有無のチェックと、GMSServicesの初期化を行っています。
Samples.mの中には、デモ用のタイトルと呼び出されるViewControllerのクラスが定義されてます。
Map Demos
Basic Map
デフォルトのGMSMapViewがぺろんと貼ってあるだけのデモ。スクロール、ズーム、ティルト、回転と、ジェスチャによる操作は可能なので、これだけでもちゃんとしたGoogleMapsアプリになります。
- (void)viewDidLoad {
[super viewDidLoad];
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.868 longitude:151.2086 zoom:6];
self.view = [GMSMapView mapWithFrame:CGRectZero camera:camera];
}
Map Types
UISegmentedControl でノーマル/ハイブリッド/衛星写真/地形図の4種類を切り替えるデモ
Traffic Layer
Basic Mapに、GMSMapView.trafficEnabled = YESを追加しただけのデモ。これだけで道路の混雑状況がレイヤー表示されます。
My Location
GPSなどで位置情報を取得し、それをマップの中心に表示し続けられるデモ。
コンパスとMyLocationボタンの表示をonにし、myLocationEnabled = YES、位置情報の更新のイベントをKVOパターンで取得する形になってます。
myLocationEnabled をYESにするのに、GCDで遅延実行させるのはなかなかよい考え。
dispatch_async(dispatch_get_main_queue(), ^{
mapView_.myLocationEnabled = YES;
});
Indoor
サンフランシスコのモスコーニセンターの屋内平面図を表示するデモ。セレクタで1F-3Fの表示も切り替えられる。
myLocationボタンを出すより、コンパスをonにした方が良い気がする。
Indoor with Custom Level Select
上のIndoorで、GoogmeMapsのFloorPickerをUIPickerViewで代用するデモ。
mapView_.settings.indoorPicker = NO;
でFloorPickerコントロールをdisableにし、代わりにUIPickerViewを追加している。 GMSIndoorDisplayDelegateの使い方の参考にもなる。
Gesture Control
ピンチによるズームジェスチャのon/offをプログラムから切り替えるデモ
Panorama
Street View
ニューヨーク近代美術館の前のStreetViewのデモ。
panoramaView:didMoveToPanorama:の中で、最初にPanoramaが表示された時に、美術館にマーカーを立てる処理も行っている。
Fixed Street View
カメラの向きが固定されたStreetViewのデモ
view_.orientationGestures = NO;
view_.navigationGestures = NO;
view_.navigationLinksHidden = YES;
と、ズーム操作だけができる状態になっている。
Overlays
Markers
プログラムでシドニーとメルボルンのマーカーを表示するデモ。
シドニーのマーカーが選択された状態での初期表示となる。
Custom Markers
シドニーにデフォルト、メルボルンに指定画像のマーカーを表示するデモ。
+ボタンで画面内のランダムな場所にカスタムカラーの10個のマーカーを追加する機能も実装されている。
Marker Events
タップされたマーカーへカメラポジションを移動させるのと、自前のViewでInfoWindowを表示させるデモ
Polygons
ニューヨーク州とノースカロライナ州をポリゴンで塗り潰し表示するデモ。ポリゴンがタップされた時には色を変更する。
Polylines
シドニー、フィジー、ホノルル、マウンテンビューの間に、通常とgeodesicのポリーラインを表示するデモ。
Ground Overlays
ニューアークに古い地図の画像をオーバーレイ表示するデモ
Tile Overlay
モスコーニセンターの建物のフロアマップ(1F〜3F)をGMSTileLayerとして表示するデモ。上述のIndoorでサポートされていない建物はこれを使って平面図の表示が可能。
Camera
Fit Bounds
画面をロングタップしてマーカーを置いて行き、Fit Boundsボタンが押されたときに、全てのマーカーが画面内におさまるように自動でカメラを移動するデモ。
Camera Animation
NSTimerでカメラをグルグルと動かし続けるデモ。とても格好いい。
Map Layer
GMSMapViewのlayerプロパティにCABasicAnimationを追加して、表示中の場所からMyLocationの位置までアニメーションでカメラを移動させるデモ。
Services
Geocoder
マップ上のタップされた緯度経度からGeoCodingによって住所を問い合わせ、それをタイトルとスニペットにしたマーカーを作成するデモ
これで1.4.2のドキュメントとサンプルの解析も一通り完了です。