2013/03/03

GMSMapViewDelegate 一覧 - [開発] - Google Maps SDK for iOS

Google Map SDKで利用できる「GMSMapView」の通知イベントについてまとめる。
iOSアプリへのGoogle Map SDKの組み込みについては以下の記事を参照。
Google Mapを組み込む - [開発] - Google Maps SDK for iOS





デリゲートメソッド一覧

GMSMapViewのdelegate、「GMSMapViewDelegate」で利用できるのは以下のメソッドだ。

メソッド内容
- (void)mapView:(GMSMapView *)mapView didChangeCameraPosition:(GMSCameraPosition *)position;地図の表示領域(カメラ)が変更された際に通知される。
アニメーション中は途中の表示領域が通知されたない場合があるが、最終的な位置で通知される。
- (void)mapView:(GMSMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate;地図上の特定座標をタップした際に通知される。
マーカーをタップした際には通知されない。
- (void)mapView:(GMSMapView *)mapView didLongPressAtCoordinate:(CLLocationCoordinate2D)coordinate; 地図上の特定の座標を長押しした際に通知される。
- (BOOL)mapView:(GMSMapView *)mapView didTapMarker:(id)marker; マーカーがタップされた際に通知される。
NOを返すと通常の動作であるマーカーウィンドウを表示する。
YESを返すとマーカーウィンドウを表示しない。
- (void)mapView:(GMSMapView *)mapView didTapInfoWindowOfMarker:(id)marker; マーカーのウィンドウをタップした際に通知される。
- (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(id)marker; マーカーがタップされて、ウィンドウが表示されるタイミングで通知される。
独自のウィンドウを返すことができる。



実装方法

ヘッダーへGoogle Mapsをインポートする。
#import <GoogleMaps/GoogleMaps.h>
#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<GMSMapViewDelegate>

@end

ViewControllerをdelegateへ指定する。
    mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera];
    mapView_.delegate = self;

デリゲートメソッドを定義する
#pragma mark - GMSMapViewDelegate

/**
 * 地図上の特定座標をタップした際に通知される。
 * マーカーをタップした際には通知されない。
 */
- (void)mapView:(GMSMapView *)mapVie didTapAtCoordinate:(CLLocationCoordinate2D)coordinate {
    NSLog(@"didTapAtCoordinate %f,%f", coordinate.latitude, coordinate.longitude);
}


/**
 * 地図の表示領域(カメラ)が変更された際に通知される。
 * アニメーション中は途中の表示領域が通知されたない場合があるが、最終的な位置で通知される。
 */
- (void)mapView:(GMSMapView *)mapView didChangeCameraPosition:(GMSCameraPosition *)position {
    NSLog(@"didChangeCameraPosition %f,%f", position.target.latitude, position.target.longitude);
}


/**
 * 地図上の特定の座標を長押しした際に通知される。
 */
- (void)mapView:(GMSMapView *)mapView didLongPressAtCoordinate:(CLLocationCoordinate2D)coordinate {
    NSLog(@"didLongPressAtCoordinate %f,%f", coordinate.latitude, coordinate.longitude);
}

/**
 * マーカーがタップされた際に通知される。
 * NOを返すと通常の動作であるマーカーウィンドウを表示する。
 * YESを返すとマーカーウィンドウを表示しない。
 */
- (BOOL)mapView:(GMSMapView *)mapView didTapMarker:(id)marker {
    NSLog(@"didTapMarker title:%@, snippet:%@", [marker title], [marker snippet]);
    return NO;
}

/**
 * マーカーのウィンドウをタップした際に通知される。
 */
- (void)mapView:(GMSMapView *)mapView didTapInfoWindowOfMarker:(id)marker {
    NSLog(@"didTapInfoWindowOfMarker title:%@, snippet:%@", [marker title], [marker snippet]);
}

/**
 * マーカーがタップされて、ウィンドウが表示されるタイミングで通知される。
 * 独自のウィンドウを返すことができる。
 */
- (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(id)marker {
    UIView *mWindow = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    mWindow.backgroundColor = [UIColor redColor];
    return mWindow;
}


マーカーウィンドウを独自のウィンドウにする場合のサイズの上限は500。
独自のマーカーウィンドウを表示すると以下のようになる。

デフォルトのウィンドウ


カスタムウィンドウ(サイズ:100)
カスタムウィンドウ(サイズ:500)



Related Posts Plugin for WordPress, Blogger...

0 件のコメント:

コメントを投稿