sos の 作業メモ

プログラミングや英会話学習、マイルや旅行、日常生活など。最近はWebFormなASP.NETのお守りがお仕事です。

日々の生活にhappyをプラスする|ハピタス Gポイント

1.4.0 登場! Google Maps SDK for iOS

2013/08/22 追記

1.4.2がリリースされているのに今日気がつきました。

いつの間にか1.4.2になっている Google Maps SDK for iOS - sos の 作業メモ

リリースノートと、ドキュメントの変更点をざっと眺めて行きます。 (ドキュメントの変更点は直接該当の記事を修正していきます)



1.3.1が出てからしばらく続いた平穏な日々。先日のAndroid版Mapアプリでのインターフェースの変更をみて、あぁこれはぼちぼちなんか来そうだなと不安を感じていたのですが、めでたく本日、 iOSGoogle Mapsアプリと共に、SDKも1.4.0にアップデートされました。

本家のページはここ

そんなわけで、さっそくリリースノートをチェック

新機能

  • 50カ国以上をカバーしたストリートビューがつかえるよ

    • ストリートビュー用のGMSPanoramaViewってのを追加したよ。コードからもユーザーからも操作可能だよ
    • GMSMarkersは GMSMapViewとGMSPanoramaViewで共有できるよ
    • GMSPanoramaServiceはデータを先読みするのに使えるよ
  • 利用可能な場面では、屋内平面マップと、階選択用のコントロールが表示されるよ

  • 新しいGoogle Mapsにあわせてマップのデザインも更新したよ
  • InfoWindowはTilt(bird view)時でも1:1のアスペクト比で表示されるようにしたよ
  • GMSMapViewのdelegateメソッドに mapView:willMove: と、mapView:idleAtCameraPosition:を追加したよ。これでカメラの移動開始と終了が個別にとれるね。
  • polylineとpolygonの表示を改善したよ
  • 全てのoverlays(マップ上に配置可能なオブジェクト) に zindexのプロパティを追加したよ。GMSMarkersとその他のoverlaysの2種類で計算されるよ
  • GMSGeometryUtilsに、方位や距離、オフセットなど、地表の座標間の計算に便利なメソッドをいろいろと追加したよ
  • 他のプラットフォームのGoogle Maps APIにあわせて、 GMSGroundOverlayはzoomLevelプロパティをサポートしないことにしたよ。既存のコードを移行するには、ヘルパーメソッドのgroundOverlayWithPosition:icon:zoomLevel: を使ってね

バグ修正

  • GMSPolygonのタップのしやすさを改善したよ
  • 理由を問わず、真北表示に戻ったらコンパスの表示を消すようにしたよ。もちろんアニメ表示の時でもね。
  • 大きさが0のGMSPolygonを作ったときにクラッシュしてたバグを直したよ
  • ジェスチャ操作で、最後のアニメ表示が完了するまでMapViewが解放されない状態だったのを修正したよ
  • InfoWindowは、もうタップイベントを見過ごさなくなったよ。
  • GMSMapView上のAccessibility Elementsは、デフォルトでは非表示に変更されちゃったから、それらを有効にするなら以下の移行手順をみてね。

1.3系からの移行

1.4.0では、Accessibility Elementsと、Ground Overlayの扱いが変更されたよ。既存のアプリでこれらを利用しているなら、以下の処理に変えないとダメだよ。

Accessibility Elementsに依存してるなら、MapViewのaccessibilityElementsHiddenプロパティをNOに設定する

mapView_.accessibilityElementsHidden = NO;

GMSGroundOverlay.zoomLevel を直接使っている箇所を、groundOverlayWithPosition:icon:zoomLevel:メソッドに置き換える。あと、矩形で座標を指定することもできるよ

1.3系まではこう書いてたのを、

GMSGroundOverlay *groundOverlay = [[GMSGroundOverlay alloc] init];
groundOverlay.icon = [UIImage imageNamed:@"akashi.jpg"];
groundOverlay.position = CLLocationCoordinate2DMake(34.65,135.0);
groundOverlay.zoomLevel = 13.6;

1.4からはこう

CLLocationCoordinate2D akashi = CLLocationCoordinate2DMake(34.65,135.0);
GMSGroundOverlay *groundOverlay = [GMSGroundOverlay groundOverlayWithPosition:akashi
    icon:[UIImage imageNamed:@"akashi.jpg"] zoomLevel:13.6];

あと、こんな風に北東と南西の座標を指定するのもおすすめだよ

CLLocationCoordinate2D southWest = CLLocationCoordinate2DMake(40.712216,-74.22655);
CLLocationCoordinate2D northEast = CLLocationCoordinate2DMake(40.773941,-74.12544);
GMSCoordinateBounds *overlayBounds = [[GMSCoordinateBounds alloc] initWithCoordinate:southWest coordinate:northEast];
UIImage *icon = [UIImage imageNamed:@"newark_nj_1922.jpg"];
GMSGroundOverlay *overlay = [GMSGroundOverlay groundOverlayWithBounds:overlayBounds
    icon:[UIImage imageNamed:@"newark_nj_1922.jpg"]];

ということで、ストリートビュー用のViewが追加されたり結構大きな修正が入ってますね。 お次はデモのソースでも眺めるとしますか…

Getting Startedとか見直しますし、せっかくなので、Developer Guide全体をざっと読み直すことにしました。

1.4時代のDeveloper Guideへ